summaryrefslogtreecommitdiffstats
path: root/proto/rip/rip.h
diff options
context:
space:
mode:
Diffstat (limited to 'proto/rip/rip.h')
-rw-r--r--proto/rip/rip.h60
1 files changed, 60 insertions, 0 deletions
diff --git a/proto/rip/rip.h b/proto/rip/rip.h
new file mode 100644
index 0000000..8bcd0ce
--- /dev/null
+++ b/proto/rip/rip.h
@@ -0,0 +1,60 @@
+/*
+ * 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)