61 lines
979 B
C
61 lines
979 B
C
|
/*
|
||
|
* Structures for RIP protocol
|
||
|
*/
|
||
|
|
||
|
struct rip_connection {
|
||
|
ip_addr addr;
|
||
|
struct rip_entry *sendptr;
|
||
|
sock *send;
|
||
|
};
|
||
|
|
||
|
struct rip_packet_heading {
|
||
|
u8 command;
|
||
|
u8 version;
|
||
|
#define RIP_V1 1
|
||
|
#define RIP_V2 2
|
||
|
u16 unused;
|
||
|
};
|
||
|
|
||
|
struct rip_block {
|
||
|
u16 family; /* 0xffff on first message means this is authentication */
|
||
|
u16 tag;
|
||
|
u32 network;
|
||
|
u32 netmask;
|
||
|
u32 nexthop;
|
||
|
u32 metric;
|
||
|
};
|
||
|
|
||
|
struct rip_entry {
|
||
|
node n;
|
||
|
ip_addr whotoldme;
|
||
|
|
||
|
ip_addr network;
|
||
|
ip_addr netmask;
|
||
|
ip_addr nexthop;
|
||
|
|
||
|
int metric;
|
||
|
u16 tag;
|
||
|
|
||
|
bird_clock_t updated, changed;
|
||
|
};
|
||
|
|
||
|
struct rip_packet {
|
||
|
struct rip_packet_heading heading;
|
||
|
struct rip_block block[25];
|
||
|
};
|
||
|
|
||
|
struct rip_data {
|
||
|
struct proto inherited;
|
||
|
sock *listen;
|
||
|
timer *timer;
|
||
|
list connections;
|
||
|
list rtable;
|
||
|
int magic;
|
||
|
};
|
||
|
|
||
|
#define P ((struct rip_data *) p)
|
||
|
#define E ((struct rip_entry *) e)
|
||
|
|
||
|
#define RIP_MAGIC 81861253
|
||
|
#define CHK_MAGIC do { if (P->magic != RIP_MAGIC) die( "Not enough magic\n" ); } while (0)
|