void
cmd_build_tree(void)
{
- unsigned int i;
+ uint i;
cmd_root.plastson = &cmd_root.son;
/* Lexer */
-extern int (*cf_read_hook)(byte *buf, unsigned int max, int fd);
+extern int (*cf_read_hook)(byte *buf, uint max, int fd);
struct symbol {
struct symbol *next;
* representation consists of @n ones followed by zeroes.
*/
u32
-u32_mkmask(unsigned n)
+u32_mkmask(uint n)
{
return n ? ~((1 << (32 - n)) - 1) : 0;
}
* u32_masklen Inverse operation to u32_mkmask, -1 if not a bitmask.
*/
-u32 u32_mkmask(unsigned n);
+u32 u32_mkmask(uint n);
int u32_masklen(u32 x);
u32 u32_log2(u32 v);
}
static u16
-ipsum_calc_block(u32 *buf, unsigned len, u16 isum)
+ipsum_calc_block(u32 *buf, uint len, u16 isum)
{
/*
* A few simple facts about the IP checksum (see RFC 1071 for detailed
}
static u16
-ipsum_calc(void *frag, unsigned len, va_list args)
+ipsum_calc(void *frag, uint len, va_list args)
{
u16 sum = 0;
frag = va_arg(args, void *);
if (!frag)
break;
- len = va_arg(args, unsigned);
+ len = va_arg(args, uint);
}
return sum;
}
* Result: 1 if the checksum is correct, 0 else.
*/
int
-ipsum_verify(void *frag, unsigned len, ...)
+ipsum_verify(void *frag, uint len, ...)
{
va_list args;
u16 sum;
* up checksum calculation as much as possible.
*/
u16
-ipsum_calculate(void *frag, unsigned len, ...)
+ipsum_calculate(void *frag, uint len, ...)
{
va_list args;
u16 sum;
* fragments finished by NULL pointer.
*/
-int ipsum_verify(void *frag, unsigned len, ...);
-u16 ipsum_calculate(void *frag, unsigned len, ...);
+int ipsum_verify(void *frag, uint len, ...);
+u16 ipsum_calculate(void *frag, uint len, ...);
#endif
#define ipa_in_net(x,n,p) (ipa_zero(ipa_and(ipa_xor((n),(x)),ipa_mkmask(p))))
#define net_in_net(n1,l1,n2,l2) (((l1) >= (l2)) && (ipa_zero(ipa_and(ipa_xor((n1),(n2)),ipa_mkmask(l2)))))
-char *ip_scope_text(unsigned);
+char *ip_scope_text(uint);
struct prefix {
ip_addr addr;
- unsigned int len;
+ uint len;
};
struct lp_chunk {
struct lp_chunk *next;
- unsigned int size;
+ uint size;
uintptr_t data_align[0];
byte data[0];
};
byte *ptr, *end;
struct lp_chunk *first, *current, **plast; /* Normal (reusable) chunks */
struct lp_chunk *first_large; /* Large chunks */
- unsigned chunk_size, threshold, total, total_large;
+ uint chunk_size, threshold, total, total_large;
};
static void lp_free(resource *);
* @blk.
*/
linpool
-*lp_new(pool *p, unsigned blk)
+*lp_new(pool *p, uint blk)
{
linpool *m = ralloc(p, &lp_class);
m->plast = &m->first;
* size chunk, an "overflow" chunk is created for it instead.
*/
void *
-lp_alloc(linpool *m, unsigned size)
+lp_alloc(linpool *m, uint size)
{
byte *a = (byte *) BIRD_ALIGN((unsigned long) m->ptr, CPU_STRUCT_ALIGN);
byte *e = a + size;
* how to allocate strings without any space overhead.
*/
void *
-lp_allocu(linpool *m, unsigned size)
+lp_allocu(linpool *m, uint size)
{
byte *a = m->ptr;
byte *e = a + size;
* clears the allocated memory block.
*/
void *
-lp_allocz(linpool *m, unsigned size)
+lp_allocz(linpool *m, uint size)
{
void *z = lp_alloc(m, size);
} else if (flags & SIGN)
num = va_arg(args, int);
else
- num = va_arg(args, unsigned int);
+ num = va_arg(args, uint);
str = number(str, num, base, field_width, precision, flags, size);
if (!str)
return -1;
struct slab {
resource r;
- unsigned size;
+ uint size;
list objs;
};
};
slab *
-sl_new(pool *p, unsigned size)
+sl_new(pool *p, uint size)
{
slab *s = ralloc(p, &sl_class);
s->size = size;
struct slab {
resource r;
- unsigned obj_size, head_size, objs_per_slab, num_empty_heads, data_size;
+ uint obj_size, head_size, objs_per_slab, num_empty_heads, data_size;
list empty_heads, partial_heads, full_heads;
};
* objects of size @size can be allocated.
*/
slab *
-sl_new(pool *p, unsigned size)
+sl_new(pool *p, uint size)
{
slab *s = ralloc(p, &sl_class);
- unsigned int align = sizeof(struct sl_alignment);
+ uint align = sizeof(struct sl_alignment);
if (align < sizeof(int))
align = sizeof(int);
s->data_size = size;
struct sl_head *h = xmalloc(SLAB_SIZE);
struct sl_obj *o = (struct sl_obj *)((byte *)h+s->head_size);
struct sl_obj *no;
- unsigned int n = s->objs_per_slab;
+ uint n = s->objs_per_slab;
h->first_free = o;
h->num_full = 0;
int type; /* Socket type */
void *data; /* User data */
ip_addr saddr, daddr; /* IPA_NONE = unspecified */
- unsigned sport, dport; /* 0 = unspecified (for IP: protocol type) */
+ uint sport, dport; /* 0 = unspecified (for IP: protocol type) */
int tos; /* TOS / traffic class, -1 = default */
int priority; /* Local socket priority, -1 = default */
int ttl; /* Time To Live, -1 = default */
struct iface *iface; /* Interface; specify this for broad/multicast sockets */
byte *rbuf, *rpos; /* NULL=allocate automatically */
- unsigned rbsize;
+ uint rbsize;
int (*rx_hook)(struct birdsock *, int size); /* NULL=receiving turned off, returns 1 to clear rx buffer */
byte *tbuf, *tpos; /* NULL=allocate automatically */
byte *ttx; /* Internal */
- unsigned tbsize;
+ uint tbsize;
void (*tx_hook)(struct birdsock *);
void (*err_hook)(struct birdsock *, int); /* errno or zero if EOF */
/* Information about received datagrams (UDP, RAW), valid in rx_hook */
ip_addr faddr, laddr; /* src (From) and dst (Local) address of the datagram */
- unsigned fport; /* src port of the datagram */
- unsigned lifindex; /* local interface that received the datagram */
+ uint fport; /* src port of the datagram */
+ uint lifindex; /* local interface that received the datagram */
/* laddr and lifindex are valid only if SKF_LADDR_RX flag is set to request it */
int af; /* Address family (AF_INET, AF_INET6 or 0 for non-IP) of fd */
int sk_open(sock *); /* Open socket */
int sk_rx_ready(sock *s);
-int sk_send(sock *, unsigned len); /* Send data, <0=err, >0=ok, 0=sleep */
-int sk_send_to(sock *, unsigned len, ip_addr to, unsigned port); /* sk_send to given destination */
+int sk_send(sock *, uint len); /* Send data, <0=err, >0=ok, 0=sleep */
+int sk_send_to(sock *, uint len, ip_addr to, uint port); /* sk_send to given destination */
void sk_reallocate(sock *); /* Free and allocate tbuf & rbuf */
void sk_set_rbsize(sock *s, uint val); /* Resize RX buffer */
void sk_set_tbsize(sock *s, uint val); /* Resize TX buffer, keeping content */
* Wherever possible, please use the memory resources instead.
*/
void *
-xmalloc(unsigned size)
+xmalloc(uint size)
{
void *p = malloc(size);
if (p)
* Wherever possible, please use the memory resources instead.
*/
void *
-xrealloc(void *ptr, unsigned size)
+xrealloc(void *ptr, uint size)
{
void *p = realloc(ptr, size);
if (p)
* = ((1-1/k)^k)^a which we can approximate by e^-a.
*/
-unsigned int hf(unsigned int n)
+uint hf(uint n)
{
#if 0
n = (n ^ (n >> 16)) & 0xffff;
while (max--)
{
- unsigned int i, e;
+ uint i, e;
if (scanf("%x/%d", &i, &e) != 2)
if (feof(stdin))
break;
}
void
-as_path_format(struct adata *path, byte *buf, unsigned int size)
+as_path_format(struct adata *path, byte *buf, uint size)
{
byte *p = path->data;
byte *e = p + path->length;
* the buffer to indicate truncation.
*/
int
-int_set_format(struct adata *set, int way, int from, byte *buf, unsigned int size)
+int_set_format(struct adata *set, int way, int from, byte *buf, uint size)
{
u32 *z = (u32 *) set->data;
byte *end = buf + size - 24;
}
int
-ec_set_format(struct adata *set, int from, byte *buf, unsigned int size)
+ec_set_format(struct adata *set, int from, byte *buf, uint size)
{
u32 *z = int_set_get_data(set);
byte *end = buf + size - 24;
struct adata *as_path_prepend(struct linpool *pool, struct adata *olda, u32 as);
int as_path_convert_to_old(struct adata *path, byte *dst, int *new_used);
int as_path_convert_to_new(struct adata *path, byte *dst, int req_as);
-void as_path_format(struct adata *path, byte *buf, unsigned int size);
+void as_path_format(struct adata *path, byte *buf, uint size);
int as_path_getlen(struct adata *path);
int as_path_getlen_int(struct adata *path, int bs);
int as_path_get_first(struct adata *path, u32 *orig_as);
static inline u64 ec_generic(u64 key, u64 val)
{ return (key << 32) | val; }
-int int_set_format(struct adata *set, int way, int from, byte *buf, unsigned int size);
+int int_set_format(struct adata *set, int way, int from, byte *buf, uint size);
int ec_format(byte *buf, u64 ec);
-int ec_set_format(struct adata *set, int from, byte *buf, unsigned int size);
+int ec_set_format(struct adata *set, int from, byte *buf, uint size);
int int_set_contains(struct adata *list, u32 val);
int ec_set_contains(struct adata *list, u64 val);
struct adata *int_set_add(struct linpool *pool, struct adata *list, u32 val);
cli_copy_message(cli *c)
{
byte *p, *q;
- unsigned int cnt = 2;
+ uint cnt = 2;
if (c->ring_overflow)
{
static byte *cli_rh_pos;
-static unsigned int cli_rh_len;
+static uint cli_rh_len;
static int cli_rh_trick_flag;
struct cli *this_cli;
static int
-cli_cmd_read_hook(byte *buf, unsigned int max, UNUSED int fd)
+cli_cmd_read_hook(byte *buf, uint max, UNUSED int fd)
{
if (!cli_rh_trick_flag)
{
static int cli_log_inited;
void
-cli_set_log_echo(cli *c, unsigned int mask, unsigned int size)
+cli_set_log_echo(cli *c, uint mask, uint size)
{
if (c->ring_buf)
{
}
void
-cli_echo(unsigned int class, byte *msg)
+cli_echo(uint class, byte *msg)
{
unsigned len, free, i, l;
cli *c;
struct linpool *parser_pool; /* Pool used during parsing */
byte *ring_buf; /* Ring buffer for asynchronous messages */
byte *ring_end, *ring_read, *ring_write; /* Pointers to the ring buffer */
- unsigned int ring_overflow; /* Counter of ring overflows */
- unsigned int log_mask; /* Mask of allowed message levels */
- unsigned int log_threshold; /* When free < log_threshold, store only important messages */
- unsigned int async_msg_size; /* Total size of async messages queued in tx_buf */
+ uint ring_overflow; /* Counter of ring overflows */
+ uint log_mask; /* Mask of allowed message levels */
+ uint log_threshold; /* When free < log_threshold, store only important messages */
+ uint async_msg_size; /* Total size of async messages queued in tx_buf */
} cli;
extern pool *cli_pool;
void cli_printf(cli *, int, char *, ...);
#define cli_msg(x...) cli_printf(this_cli, x)
-void cli_set_log_echo(cli *, unsigned int mask, unsigned int size);
+void cli_set_log_echo(cli *, uint mask, uint size);
/* Functions provided to sysdep layer */
void cli_free(cli *);
void cli_kick(cli *);
void cli_written(cli *);
-void cli_echo(unsigned int class, byte *msg);
+void cli_echo(uint class, byte *msg);
static inline int cli_access_restricted(void)
{
static slab *neigh_slab;
static list sticky_neigh_list, neigh_hash_table[NEIGH_HASH_SIZE];
-static inline unsigned int
+static inline uint
neigh_hash(struct proto *p, ip_addr *a)
{
return (p->hash_key ^ ipa_hash(*a)) & (NEIGH_HASH_SIZE-1);
{
neighbor *n;
int class, scope = -1;
- unsigned int h = neigh_hash(p, a);
+ uint h = neigh_hash(p, a);
struct iface *i;
struct ifa *addr;
}
void
-proto_cmd_show(struct proto *p, unsigned int verbose, int cnt)
+proto_cmd_show(struct proto *p, uint verbose, int cnt)
{
byte buf[256], tbuf[TM_DATETIME_BUFFER_SIZE];
}
void
-proto_cmd_disable(struct proto *p, unsigned int arg UNUSED, int cnt UNUSED)
+proto_cmd_disable(struct proto *p, uint arg UNUSED, int cnt UNUSED)
{
if (p->disabled)
{
}
void
-proto_cmd_enable(struct proto *p, unsigned int arg UNUSED, int cnt UNUSED)
+proto_cmd_enable(struct proto *p, uint arg UNUSED, int cnt UNUSED)
{
if (!p->disabled)
{
}
void
-proto_cmd_restart(struct proto *p, unsigned int arg UNUSED, int cnt UNUSED)
+proto_cmd_restart(struct proto *p, uint arg UNUSED, int cnt UNUSED)
{
if (p->disabled)
{
}
void
-proto_cmd_reload(struct proto *p, unsigned int dir, int cnt UNUSED)
+proto_cmd_reload(struct proto *p, uint dir, int cnt UNUSED)
{
if (p->disabled)
{
}
void
-proto_cmd_debug(struct proto *p, unsigned int mask, int cnt UNUSED)
+proto_cmd_debug(struct proto *p, uint mask, int cnt UNUSED)
{
p->debug = mask;
}
void
-proto_cmd_mrtdump(struct proto *p, unsigned int mask, int cnt UNUSED)
+proto_cmd_mrtdump(struct proto *p, uint mask, int cnt UNUSED)
{
p->mrtdump = mask;
}
static void
-proto_apply_cmd_symbol(struct symbol *s, void (* cmd)(struct proto *, unsigned int, int), unsigned int arg)
+proto_apply_cmd_symbol(struct symbol *s, void (* cmd)(struct proto *, uint, int), uint arg)
{
if (s->class != SYM_PROTO)
{
}
static void
-proto_apply_cmd_patt(char *patt, void (* cmd)(struct proto *, unsigned int, int), unsigned int arg)
+proto_apply_cmd_patt(char *patt, void (* cmd)(struct proto *, uint, int), uint arg)
{
int cnt = 0;
}
void
-proto_apply_cmd(struct proto_spec ps, void (* cmd)(struct proto *, unsigned int, int),
- int restricted, unsigned int arg)
+proto_apply_cmd(struct proto_spec ps, void (* cmd)(struct proto *, uint, int),
+ int restricted, uint arg)
{
if (restricted && cli_access_restricted())
return;
void proto_show_limit(struct proto_limit *l, const char *dsc);
void proto_show_basic_info(struct proto *p);
-void proto_cmd_show(struct proto *, unsigned int, int);
-void proto_cmd_disable(struct proto *, unsigned int, int);
-void proto_cmd_enable(struct proto *, unsigned int, int);
-void proto_cmd_restart(struct proto *, unsigned int, int);
-void proto_cmd_reload(struct proto *, unsigned int, int);
-void proto_cmd_debug(struct proto *, unsigned int, int);
-void proto_cmd_mrtdump(struct proto *, unsigned int, int);
-
-void proto_apply_cmd(struct proto_spec ps, void (* cmd)(struct proto *, unsigned int, int), int restricted, unsigned int arg);
+void proto_cmd_show(struct proto *, uint, int);
+void proto_cmd_disable(struct proto *, uint, int);
+void proto_cmd_enable(struct proto *, uint, int);
+void proto_cmd_restart(struct proto *, uint, int);
+void proto_cmd_reload(struct proto *, uint, int);
+void proto_cmd_debug(struct proto *, uint, int);
+void proto_cmd_mrtdump(struct proto *, uint, int);
+
+void proto_apply_cmd(struct proto_spec ps, void (* cmd)(struct proto *, uint, int), int restricted, uint arg);
struct proto *proto_get_named(struct symbol *, struct protocol *);
#define CMD_RELOAD 0
byte efef; /* 0xff to distinguish between iterator and node */
byte pad[3];
struct fib_node *node; /* Or NULL if freshly merged */
- unsigned int hash;
+ uint hash;
};
typedef void (*fib_init_func)(struct fib_node *);
pool *fib_pool; /* Pool holding all our data */
slab *fib_slab; /* Slab holding all fib nodes */
struct fib_node **hash_table; /* Node hash table */
- unsigned int hash_size; /* Number of hash table entries (a power of two) */
- unsigned int hash_order; /* Binary logarithm of hash_size */
- unsigned int hash_shift; /* 16 - hash_log */
- unsigned int entries; /* Number of entries */
- unsigned int entries_min, entries_max;/* Entry count limits (else start rehashing) */
+ uint hash_size; /* Number of hash table entries (a power of two) */
+ uint hash_order; /* Binary logarithm of hash_size */
+ uint hash_shift; /* 16 - hash_log */
+ uint entries; /* Number of entries */
+ uint entries_min, entries_max; /* Entry count limits (else start rehashing) */
fib_init_func init; /* Constructor */
};
#define FIB_WALK(fib, z) do { \
struct fib_node *z, **ff = (fib)->hash_table; \
- unsigned int count = (fib)->hash_size; \
+ uint count = (fib)->hash_size; \
while (count--) \
for(z = *ff++; z; z=z->next)
#define FIB_ITERATE_START(fib, it, z) do { \
struct fib_node *z = fit_get(fib, it); \
- unsigned int count = (fib)->hash_size; \
- unsigned int hpos = (it)->hash; \
+ uint count = (fib)->hash_size; \
+ uint hpos = (it)->hash; \
for(;;) { \
if (!z) \
{ \
#define EAF_TEMP 0x80 /* A temporary attribute (the one stored in the tmp attr list) */
struct adata {
- unsigned int length; /* Length of data */
+ uint length; /* Length of data */
byte data[0];
};
unsigned ea_scan(ea_list *); /* How many bytes do we need for merged ea_list */
void ea_merge(ea_list *from, ea_list *to); /* Merge sub-lists to allocated buffer */
int ea_same(ea_list *x, ea_list *y); /* Test whether two ea_lists are identical */
-unsigned int ea_hash(ea_list *e); /* Calculate 16-bit hash value */
+uint ea_hash(ea_list *e); /* Calculate 16-bit hash value */
ea_list *ea_append(ea_list *to, ea_list *what);
void ea_format_bitfield(struct eattr *a, byte *buf, int bufsize, const char **names, int min, int max);
HASH_INIT(src_hash, rta_pool, RSH_INIT_ORDER);
}
-static inline int u32_cto(unsigned int x) { return ffs(~x) - 1; }
+static inline int u32_cto(uint x) { return ffs(~x) - 1; }
static inline u32
rte_src_alloc_id(void)
* Multipath Next Hop
*/
-static inline unsigned int
+static inline uint
mpnh_hash(struct mpnh *x)
{
- unsigned int h = 0;
+ uint h = 0;
for (; x; x = x->next)
h ^= ipa_hash(x->gw);
}
static inline void
-opaque_format(struct adata *ad, byte *buf, unsigned int size)
+opaque_format(struct adata *ad, byte *buf, uint size)
{
byte *bound = buf + size - 10;
int i;
* ea_hash() takes an extended attribute list and calculated a hopefully
* uniformly distributed hash value from its contents.
*/
-inline unsigned int
+inline uint
ea_hash(ea_list *e)
{
u32 h = 0;
* rta's
*/
-static unsigned int rta_cache_count;
-static unsigned int rta_cache_size = 32;
-static unsigned int rta_cache_limit;
-static unsigned int rta_cache_mask;
+static uint rta_cache_count;
+static uint rta_cache_size = 32;
+static uint rta_cache_limit;
+static uint rta_cache_mask;
static rta **rta_hash_table;
static void
rta_cache_mask = rta_cache_size - 1;
}
-static inline unsigned int
+static inline uint
rta_hash(rta *a)
{
return (((uint) (uintptr_t) a->src) ^ ipa_hash(a->gw) ^
static inline void
rta_insert(rta *r)
{
- unsigned int h = r->hash_key & rta_cache_mask;
+ uint h = r->hash_key & rta_cache_mask;
r->next = rta_hash_table[h];
if (r->next)
r->next->pprev = &r->next;
static void
rta_rehash(void)
{
- unsigned int ohs = rta_cache_size;
- unsigned int h;
+ uint ohs = rta_cache_size;
+ uint h;
rta *r, *n;
rta **oht = rta_hash_table;
rta_lookup(rta *o)
{
rta *r;
- unsigned int h;
+ uint h;
ASSERT(!(o->aflags & RTAF_CACHED));
if (o->eattrs)
rta_dump_all(void)
{
rta *a;
- unsigned int h;
+ uint h;
debug("Route attribute cache (%d entries, rehash at %d):\n", rta_cache_count, rta_cache_limit);
for(h=0; h<rta_cache_size; h++)
void *
fib_get(struct fib *f, ip_addr *a, int len)
{
- unsigned int h = ipa_hash(*a);
+ uint h = ipa_hash(*a);
struct fib_node **ee = f->hash_table + (h >> f->hash_shift);
struct fib_node *g, *e = *ee;
u32 uid = h << 16;
fib_delete(struct fib *f, void *E)
{
struct fib_node *e = E;
- unsigned int h = fib_hash(f, &e->prefix);
+ uint h = fib_hash(f, &e->prefix);
struct fib_node **ee = f->hash_table + h;
struct fib_iterator *it;
void
fib_check(struct fib *f)
{
- unsigned int i, ec, lo, nulls;
+ uint i, ec, lo, nulls;
ec = 0;
for(i=0; i<f->hash_size; i++)
for(n=f->hash_table[i]; n; n=n->next)
{
struct fib_iterator *j, *j0;
- unsigned int h0 = ipa_hash(n->prefix);
+ uint h0 = ipa_hash(n->prefix);
if (h0 < lo)
bug("fib_check: discord in hash chains");
lo = h0;
void dump(char *m)
{
- unsigned int i;
+ uint i;
debug("%s ... order=%d, size=%d, entries=%d\n", m, f.hash_order, f.hash_size, f.hash_size);
for(i=0; i<f.hash_size; i++)
}
static inline void
-rte_trace_in(unsigned int flag, struct proto *p, rte *e, char *msg)
+rte_trace_in(uint flag, struct proto *p, rte *e, char *msg)
{
if (p->debug & flag)
rte_trace(p, e, '>', msg);
}
static inline void
-rte_trace_out(unsigned int flag, struct proto *p, rte *e, char *msg)
+rte_trace_out(uint flag, struct proto *p, rte *e, char *msg)
{
if (p->debug & flag)
rte_trace(p, e, '<', msg);
static inline void
hc_insert(struct hostcache *hc, struct hostentry *he)
{
- unsigned int k = he->hash_key >> hc->hash_shift;
+ uint k = he->hash_key >> hc->hash_shift;
he->next = hc->hash_table[k];
hc->hash_table[k] = he;
}
hc_remove(struct hostcache *hc, struct hostentry *he)
{
struct hostentry **hep;
- unsigned int k = he->hash_key >> hc->hash_shift;
+ uint k = he->hash_key >> hc->hash_shift;
for (hep = &hc->hash_table[k]; *hep != he; hep = &(*hep)->next);
*hep = he->next;
if (!tab->hostcache)
rt_init_hostcache(tab);
- unsigned int k = hc_hash(a, dep);
+ uint k = hc_hash(a, dep);
struct hostcache *hc = tab->hostcache;
for (he = hc->hash_table[k >> hc->hash_shift]; he != NULL; he = he->next)
if (ipa_equal(he->addr, a) && (he->tab == dep))
/* Validates path attribute, removes AS_CONFED_* segments, and also returns path length */
static int
-validate_path(struct bgp_proto *p, int as_path, int bs, byte *idata, unsigned int *ilength)
+validate_path(struct bgp_proto *p, int as_path, int bs, byte *idata, uint *ilength)
{
int res = 0;
u8 *a, *dst;
}
static int
-bgp_encode_attr_hdr(byte *dst, unsigned int flags, unsigned code, int len)
+bgp_encode_attr_hdr(byte *dst, uint flags, unsigned code, int len)
{
int wlen;
*
* Result: Length of the attribute block generated or -1 if not enough space.
*/
-unsigned int
+uint
bgp_encode_attrs(struct bgp_proto *p, byte *w, ea_list *attrs, int remains)
{
- unsigned int i, code, type, flags;
+ uint i, code, type, flags;
byte *start = w;
int len, rv;
* by a &rta.
*/
struct rta *
-bgp_decode_attrs(struct bgp_conn *conn, byte *attr, unsigned int len, struct linpool *pool, int mandatory)
+bgp_decode_attrs(struct bgp_conn *conn, byte *attr, uint len, struct linpool *pool, int mandatory)
{
struct bgp_proto *bgp = conn->bgp;
rta *a = lp_alloc(pool, sizeof(struct rta));
- unsigned int flags, code, l, i, type;
+ uint flags, code, l, i, type;
int errcode;
byte *z, *attr_start;
byte seen[256/8];
int
bgp_get_attr(eattr *a, byte *buf, int buflen)
{
- unsigned int i = EA_ID(a->id);
+ uint i = EA_ID(a->id);
struct attr_desc *d;
int len;
struct bgp_conn {
struct bgp_proto *bgp;
struct birdsock *sk;
- unsigned int state; /* State of connection state machine */
+ uint state; /* State of connection state machine */
struct timer *connect_retry_timer;
struct timer *hold_timer;
struct timer *keepalive_timer;
struct timer *startup_timer; /* Timer used to delay protocol startup due to previous errors (startup_delay) */
struct timer *gr_timer; /* Timer waiting for reestablishment after graceful restart */
struct bgp_bucket **bucket_hash; /* Hash table of attribute buckets */
- unsigned int hash_size, hash_count, hash_limit;
+ uint hash_size, hash_count, hash_limit;
HASH(struct bgp_prefix) prefix_hash; /* Prefixes to be sent */
slab *prefix_slab; /* Slab holding prefix nodes */
list bucket_queue; /* Queue of buckets to send */
void bgp_attach_attr(struct ea_list **to, struct linpool *pool, unsigned attr, uintptr_t val);
byte *bgp_attach_attr_wa(struct ea_list **to, struct linpool *pool, unsigned attr, unsigned len);
-struct rta *bgp_decode_attrs(struct bgp_conn *conn, byte *a, unsigned int len, struct linpool *pool, int mandatory);
+struct rta *bgp_decode_attrs(struct bgp_conn *conn, byte *a, uint len, struct linpool *pool, int mandatory);
int bgp_get_attr(struct eattr *e, byte *buf, int buflen);
int bgp_rte_better(struct rte *, struct rte *);
int bgp_rte_recalculate(rtable *table, net *net, rte *new, rte *old, rte *old_best);
void bgp_free_bucket(struct bgp_proto *p, struct bgp_bucket *buck);
void bgp_init_prefix_table(struct bgp_proto *p, u32 order);
void bgp_free_prefix(struct bgp_proto *p, struct bgp_prefix *bp);
-unsigned int bgp_encode_attrs(struct bgp_proto *p, byte *w, ea_list *attrs, int remains);
+uint bgp_encode_attrs(struct bgp_proto *p, byte *w, ea_list *attrs, int remains);
void bgp_get_route_info(struct rte *, byte *buf, struct ea_list *attrs);
inline static void bgp_attach_attr_ip(struct ea_list **to, struct linpool *pool, unsigned attr, ip_addr a)
}
}
-static unsigned int
-bgp_encode_prefixes(struct bgp_proto *p, byte *w, struct bgp_bucket *buck, unsigned int remains)
+static uint
+bgp_encode_prefixes(struct bgp_proto *p, byte *w, struct bgp_bucket *buck, uint remains)
{
byte *start = w;
ip_addr a;
static void
-bgp_create_header(byte *buf, unsigned int len, unsigned int type)
+bgp_create_header(byte *buf, uint len, uint type)
{
memset(buf, 0xff, 16); /* Marker */
put_u16(buf+16, len);
bgp_fire_tx(struct bgp_conn *conn)
{
struct bgp_proto *p = conn->bgp;
- unsigned int s = conn->packets_to_send;
+ uint s = conn->packets_to_send;
sock *sk = conn->sk;
byte *buf, *pkt, *end;
int type;
#define GETADDR(p, F) \
bzero(p, sizeof(*p));\
if ((addrs & (F)) && ((struct sockaddr *)body)->sa_len) {\
- unsigned int l = ROUNDUP(((struct sockaddr *)body)->sa_len);\
+ uint l = ROUNDUP(((struct sockaddr *)body)->sa_len);\
memcpy(p, body, (l > sizeof(*p) ? sizeof(*p) : l));\
body += l;}
struct if_msghdr *ifm = (struct if_msghdr *)&msg->rtm;
void *body = (void *)(ifm + 1);
struct sockaddr_dl *dl = NULL;
- unsigned int i;
+ uint i;
struct iface *iface = NULL, f = {};
int fl = ifm->ifm_flags;
int nlen = 0;
u32 seq;
byte *rx_buffer; /* Receive buffer */
struct nlmsghdr *last_hdr; /* Recently received packet */
- unsigned int last_size;
+ uint last_size;
};
#define NL_RX_SIZE 8192
struct iface *ifi;
char *name;
u32 mtu;
- unsigned int fl;
+ uint fl;
if (!(i = nl_checkin(h, sizeof(*i))) || !nl_parse_attrs(IFLA_RTA(i), a, sizeof(a)))
return;
struct msghdr m = { (struct sockaddr *) &sa, sizeof(sa), &iov, 1, NULL, 0, 0 };
struct nlmsghdr *h;
int x;
- unsigned int len;
+ uint len;
x = recvmsg(sk->fd, &m, 0);
if (x < 0)
static char *config_name = PATH_CONFIG_FILE;
static int
-cf_read(byte *dest, unsigned int len, int fd)
+cf_read(byte *dest, uint len, int fd)
{
int l = read(fd, dest, len);
if (l < 0)
struct log_config {
node n;
- unsigned int mask; /* Classes to log */
+ uint mask; /* Classes to log */
void *fh; /* FILE to log to, NULL=syslog */
int terminal_flag;
};