From c40e05a0dffa33a8724e56121a2b6dcdfa9183e0 Mon Sep 17 00:00:00 2001 From: Martin Mares Date: Thu, 23 Apr 1998 14:01:15 +0000 Subject: Added IP address manipulation macros, interface declarations and logging. --- lib/birdlib.h | 19 +++++++++++++++++++ lib/ip.h | 18 ++++++++++++++++++ lib/ipv4.h | 35 +++++++++++++++++++++++++++++++++++ lib/ipv6.h | 44 ++++++++++++++++++++++++++++++++++++++++++++ nest/bird.h | 7 +------ nest/iface.h | 26 ++++++++++++++++++++++++++ nest/ipv4.h | 20 -------------------- nest/ipv6.h | 21 --------------------- 8 files changed, 143 insertions(+), 47 deletions(-) create mode 100644 lib/ip.h create mode 100644 lib/ipv4.h create mode 100644 lib/ipv6.h delete mode 100644 nest/ipv4.h delete mode 100644 nest/ipv6.h 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 + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#ifndef _BIRD_IP_H_ +#define _BIRD_IP_H_ + +#ifndef IPV6 +#include +#else +#include +#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 + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#ifndef _BIRD_IPV4_H_ +#define _BIRD_IPV4_H_ + +#include + +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 + * + * Can be freely distributed and used under the terms of the GNU GPL. + */ + +#ifndef _BIRD_IPV4_H_ +#define _BIRD_IPV4_H_ + +#include +#include + +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 #include - -#ifndef IPV6 -#include -#else -#include -#endif +#include 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 + +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 - * - * Can be freely distributed and used under the terms of the GNU GPL. - */ - -#ifndef _BIRD_IPV4_H_ -#define _BIRD_IPV4_H_ - -#include - -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 - * - * Can be freely distributed and used under the terms of the GNU GPL. - */ - -#ifndef _BIRD_IPV4_H_ -#define _BIRD_IPV4_H_ - -#include -#include - -typedef struct ipv4_addr { - u32 addr[4]; -} ip_addr; - -#define ipa_equal(x,y) (!memcmp(&(x),&(y),sizeof(ip_addr))) - -#endif -- cgit v1.2.3