Commit c40e05a0 authored by Martin Mareš's avatar Martin Mareš

Added IP address manipulation macros, interface declarations and logging.

parent 481f6985
......@@ -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
/*
* 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
......@@ -15,6 +15,21 @@ typedef struct ipv4_addr {
u32 addr;
} ip_addr;
#define ipa_equal(x,y) ((x).addr == (y).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
......@@ -16,6 +16,29 @@ 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
......@@ -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 */
......
......@@ -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
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment