summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMartin Mares <mj@ucw.cz>1998-04-23 16:01:15 +0200
committerMartin Mares <mj@ucw.cz>1998-04-23 16:01:15 +0200
commitc40e05a0dffa33a8724e56121a2b6dcdfa9183e0 (patch)
tree4c4322c6900ae4788006d72195028ac71ecb11c1
parent481f69854a788bd2bea5c6938e038ec6e21c491b (diff)
downloadbird-c40e05a0dffa33a8724e56121a2b6dcdfa9183e0.tar
bird-c40e05a0dffa33a8724e56121a2b6dcdfa9183e0.zip
Added IP address manipulation macros, interface declarations and logging.
-rw-r--r--lib/birdlib.h19
-rw-r--r--lib/ip.h18
-rw-r--r--lib/ipv4.h35
-rw-r--r--lib/ipv6.h44
-rw-r--r--nest/bird.h7
-rw-r--r--nest/iface.h26
-rw-r--r--nest/ipv4.h20
-rw-r--r--nest/ipv6.h21
8 files changed, 143 insertions, 47 deletions
diff --git a/lib/birdlib.h b/lib/birdlib.h
index fb4814f..eb95585 100644
--- a/lib/birdlib.h
+++ b/lib/birdlib.h
@@ -14,4 +14,23 @@
#define OFFSETOF(s, i) ((unsigned int)&((s *)0)->i)
#define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, i)))
+/* Logging and dying */
+
+void log(char *msg, ...);
+void die(char *msg, ...);
+
+#define L_DEBUG "\001" /* Debugging messages */
+#define L_INFO "\002" /* Informational messages */
+#define L_WARN "\003" /* Warnings */
+#define L_ERR "\004" /* Errors */
+#define L_AUTH "\005" /* Authorization failed etc. */
+
+/* Debugging */
+
+#ifdef LOCAL_DEBUG
+#define DBG(x, y...) log(L_DEBUG x, ##y)
+#else
+#define DBG(x, y...)
+#endif
+
#endif
diff --git a/lib/ip.h b/lib/ip.h
new file mode 100644
index 0000000..cd12ded
--- /dev/null
+++ b/lib/ip.h
@@ -0,0 +1,18 @@
+/*
+ * BIRD Internet Routing Daemon -- The Internet Protocol
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_IP_H_
+#define _BIRD_IP_H_
+
+#ifndef IPV6
+#include <lib/ipv4.h>
+#else
+#include <lib/ipv6.h>
+#endif
+
+#endif
diff --git a/lib/ipv4.h b/lib/ipv4.h
new file mode 100644
index 0000000..e5c1e8c
--- /dev/null
+++ b/lib/ipv4.h
@@ -0,0 +1,35 @@
+/*
+ * BIRD -- IP Addresses et Cetera for IPv4
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_IPV4_H_
+#define _BIRD_IPV4_H_
+
+#include <netinet/in.h>
+
+typedef struct ipv4_addr {
+ u32 addr;
+} ip_addr;
+
+#define _I(x) (x).addr
+#define _MI(x) ((struct ip_addr) { x })
+
+#define IPA_NONE(_MI(0))
+
+#define ipa_equal(x,y) (_I(x) == _I(y))
+#define ipa_and(x,y) _MI(_I(x) & _I(y))
+#define ipa_or(x,y) _MI(_I(x) | _I(y))
+#define ipa_not(x) _MI(~_I(x))
+#define ipa_mkmask(x) _MI(ipv4_mkmask(x))
+#define ipa_mklen(x) ipv4_mklen(_I(x))
+
+unsigned ipv4_mklen(u32);
+u32 ipv4_mkmask(unsigned);
+
+/* ??? htonl and ntohl ??? */
+
+#endif
diff --git a/lib/ipv6.h b/lib/ipv6.h
new file mode 100644
index 0000000..98d7811
--- /dev/null
+++ b/lib/ipv6.h
@@ -0,0 +1,44 @@
+/*
+ * BIRD -- IP Addresses et Cetera for IPv6
+ *
+ * (c) 1998 Martin Mares <mj@ucw.cz>
+ *
+ * Can be freely distributed and used under the terms of the GNU GPL.
+ */
+
+#ifndef _BIRD_IPV4_H_
+#define _BIRD_IPV4_H_
+
+#include <netinet/in.h>
+#include <string.h>
+
+typedef struct ipv4_addr {
+ u32 addr[4];
+} ip_addr;
+
+#define _MI(a,b,c,d) ((struct ip_addr) { a, b, c, d })
+#define _I0(a) ((a).addr[0])
+#define _I1(a) ((a).addr[1])
+#define _I2(a) ((a).addr[2])
+#define _I3(a) ((a).addr[3])
+
+#define IPA_NONE _MI(0,0,0,0)
+
+#define ipa_equal(x,y) (!memcmp(&(x),&(y),sizeof(ip_addr)))
+#define ipa_and(a,b) _MI(_I0(a) & _I0(b), \
+ _I1(a) & _I1(b), \
+ _I2(a) & _I2(b), \
+ _I3(a) & _I3(b))
+#define ipa_or(a,b) _MI(_I0(a) | _I0(b), \
+ _I1(a) | _I1(b), \
+ _I2(a) | _I2(b), \
+ _I3(a) | _I3(b))
+#define ipa_not(a) _MI(~_I0(a),~_I1(a),~_I2(a),~_I3(a))
+
+#define ipa_mkmask(x) ipv6_mkmask(x)
+#define ipa_mklen(x) ipv6_mklen(x)
+
+ip_addr ipv6_mkmask(unsigned);
+unsigned ipv6_mklen(ip_addr);
+
+#endif
diff --git a/nest/bird.h b/nest/bird.h
index e8c3318..062e5fd 100644
--- a/nest/bird.h
+++ b/nest/bird.h
@@ -11,12 +11,7 @@
#include <sysdep/config.h>
#include <lib/birdlib.h>
-
-#ifndef IPV6
-#include <nest/ipv4.h>
-#else
-#include <nest/ipv6.h>
-#endif
+#include <lib/ip.h>
extern u32 router_id; /* Our Router ID */
extern u16 this_as; /* Our Autonomous System Number */
diff --git a/nest/iface.h b/nest/iface.h
index 2d0d757..7b85ece 100644
--- a/nest/iface.h
+++ b/nest/iface.h
@@ -9,4 +9,30 @@
#ifndef _BIRD_IFACE_H_
#define _BIRD_IFACE_H_
+#include <lib/lists.h>
+
+struct iface {
+ node n;
+ char *name;
+ unsigned flags;
+ struct ifa *ifa; /* First address is primary */
+};
+
+#define IF_UP 1
+#define IF_MULTIACCESS 2
+#define IF_UNNUMBERED 4
+#define IF_BROADCAST 8
+#define IF_MULTICAST 16
+#define IF_TUNNEL 32
+
+/* Interface address */
+
+struct ifa {
+ struct ifa *next;
+ ip_addr ip; /* IP address of this host */
+ ip_addr prefix; /* Network prefix */
+ unsigned pxlen; /* Prefix length */
+ ip_addr brd; /* Broadcast address */
+};
+
#endif
diff --git a/nest/ipv4.h b/nest/ipv4.h
deleted file mode 100644
index 7524229..0000000
--- a/nest/ipv4.h
+++ /dev/null
@@ -1,20 +0,0 @@
-/*
- * BIRD -- IP Addresses et Cetera for IPv4
- *
- * (c) 1998 Martin Mares <mj@ucw.cz>
- *
- * Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#ifndef _BIRD_IPV4_H_
-#define _BIRD_IPV4_H_
-
-#include <netinet/in.h>
-
-typedef struct ipv4_addr {
- u32 addr;
-} ip_addr;
-
-#define ipa_equal(x,y) ((x).addr == (y).addr)
-
-#endif
diff --git a/nest/ipv6.h b/nest/ipv6.h
deleted file mode 100644
index 5d5e354..0000000
--- a/nest/ipv6.h
+++ /dev/null
@@ -1,21 +0,0 @@
-/*
- * BIRD -- IP Addresses et Cetera for IPv6
- *
- * (c) 1998 Martin Mares <mj@ucw.cz>
- *
- * Can be freely distributed and used under the terms of the GNU GPL.
- */
-
-#ifndef _BIRD_IPV4_H_
-#define _BIRD_IPV4_H_
-
-#include <netinet/in.h>
-#include <string.h>
-
-typedef struct ipv4_addr {
- u32 addr[4];
-} ip_addr;
-
-#define ipa_equal(x,y) (!memcmp(&(x),&(y),sizeof(ip_addr)))
-
-#endif