Added IP address manipulation macros, interface declarations and logging.
This commit is contained in:
parent
481f69854a
commit
c40e05a0df
8 changed files with 143 additions and 47 deletions
|
@ -14,4 +14,23 @@
|
||||||
#define OFFSETOF(s, i) ((unsigned int)&((s *)0)->i)
|
#define OFFSETOF(s, i) ((unsigned int)&((s *)0)->i)
|
||||||
#define SKIP_BACK(s, i, p) ((s *)((char *)p - OFFSETOF(s, 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
|
#endif
|
||||||
|
|
18
lib/ip.h
Normal file
18
lib/ip.h
Normal file
|
@ -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
|
35
lib/ipv4.h
Normal file
35
lib/ipv4.h
Normal file
|
@ -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
|
44
lib/ipv6.h
Normal file
44
lib/ipv6.h
Normal file
|
@ -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
|
|
@ -11,12 +11,7 @@
|
||||||
|
|
||||||
#include <sysdep/config.h>
|
#include <sysdep/config.h>
|
||||||
#include <lib/birdlib.h>
|
#include <lib/birdlib.h>
|
||||||
|
#include <lib/ip.h>
|
||||||
#ifndef IPV6
|
|
||||||
#include <nest/ipv4.h>
|
|
||||||
#else
|
|
||||||
#include <nest/ipv6.h>
|
|
||||||
#endif
|
|
||||||
|
|
||||||
extern u32 router_id; /* Our Router ID */
|
extern u32 router_id; /* Our Router ID */
|
||||||
extern u16 this_as; /* Our Autonomous System Number */
|
extern u16 this_as; /* Our Autonomous System Number */
|
||||||
|
|
26
nest/iface.h
26
nest/iface.h
|
@ -9,4 +9,30 @@
|
||||||
#ifndef _BIRD_IFACE_H_
|
#ifndef _BIRD_IFACE_H_
|
||||||
#define _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
|
#endif
|
||||||
|
|
20
nest/ipv4.h
20
nest/ipv4.h
|
@ -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
|
|
21
nest/ipv6.h
21
nest/ipv6.h
|
@ -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
|
|
Loading…
Reference in a new issue