plan9port

fork of plan9port with libvec, libstr and libsdb
Log | Files | Refs | README | LICENSE

ip.h (2778B)


      1 #ifndef _IP_H_
      2 #define _IP_H_ 1
      3 #if defined(__cplusplus)
      4 extern "C" { 
      5 #endif
      6 
      7 AUTOLIB(ip)
      8 /*
      9 #pragma	src	"/sys/src/libip"
     10 #pragma	lib	"libip.a"
     11 #pragma	varargck	type	"I"	uchar*
     12 #pragma	varargck	type	"V"	uchar*
     13 #pragma	varargck	type	"E"	uchar*
     14 #pragma	varargck	type	"M"	uchar*
     15 */
     16 enum 
     17 {
     18 	IPaddrlen=	16,
     19 	IPv4addrlen=	4,
     20 	IPv4off=	12,
     21 	IPllen=		4
     22 };
     23 
     24 /*
     25  *  for reading /net/ipifc
     26  */
     27 typedef struct Ipifc Ipifc;
     28 typedef struct Iplifc Iplifc;
     29 typedef struct Ipv6rp Ipv6rp;
     30 
     31 /* local address */
     32 struct Iplifc
     33 {
     34 	Iplifc	*next;
     35 
     36 	/* per address on the ip interface */
     37 	uchar	ip[IPaddrlen];
     38 	uchar	mask[IPaddrlen];
     39 	uchar	net[IPaddrlen];		/* ip & mask */
     40 	ulong	preflt;			/* preferred lifetime */
     41 	ulong	validlt;		/* valid lifetime */
     42 };
     43 
     44 /* default values, one per stack */
     45 struct Ipv6rp
     46 {
     47 	int	mflag;
     48 	int	oflag;
     49 	int 	maxraint;
     50 	int	minraint;
     51 	int	linkmtu;
     52 	int	reachtime;
     53 	int	rxmitra;
     54 	int	ttl;
     55 	int	routerlt;	
     56 };
     57 
     58 /* actual interface */
     59 struct Ipifc
     60 {
     61 	Ipifc	*next;
     62 	Iplifc	*lifc;
     63 
     64 	/* per ip interface */
     65 	int	index;			/* number of interface in ipifc dir */
     66 	char	dev[64];
     67 	uchar	ether[6];
     68 	uchar	sendra6;		/* on == send router adv */
     69 	uchar	recvra6;		/* on == rcv router adv */
     70 	int	mtu;
     71 	ulong	pktin;
     72 	ulong	pktout;
     73 	ulong	errin;
     74 	ulong	errout;
     75 	Ipv6rp	rp;
     76 };
     77 
     78 /*
     79  *  user level udp headers
     80  */
     81 enum 
     82 {
     83 	Udphdrsize=	52	/* size of a Udphdr */
     84 };
     85 
     86 typedef struct Udphdr Udphdr;
     87 struct Udphdr
     88 {
     89 	uchar	raddr[IPaddrlen];	/* remote address and port */
     90 	uchar	laddr[IPaddrlen];	/* local address and port */
     91 	uchar	ifcaddr[IPaddrlen];	/* address of ifc message was received from */
     92 	uchar	rport[2];
     93 	uchar	lport[2];
     94 };
     95 
     96 uchar*	defmask(uchar*);
     97 void	maskip(uchar*, uchar*, uchar*);
     98 int	eipfmt(Fmt*);
     99 int	isv4(uchar*);
    100 ulong	parseip(uchar*, char*);
    101 ulong	parseipmask(uchar*, char*);
    102 char*	v4parseip(uchar*, char*);
    103 char*	v4parsecidr(uchar*, uchar*, char*);
    104 int	parseether(uchar*, char*);
    105 int	myipaddr(uchar*, char*);
    106 int	myetheraddr(uchar*, char*);
    107 int	equivip(uchar*, uchar*);
    108 long	udpread(int, Udphdr*, void*, long);
    109 long	udpwrite(int, Udphdr*, void*, long);
    110 
    111 Ipifc*	readipifc(char*, Ipifc*, int);
    112 void	freeipifc(Ipifc*);
    113 
    114 void	hnputv(void*, uvlong);
    115 void	hnputl(void*, uint);
    116 void	hnputs(void*, ushort);
    117 uint	nhgetl(void*);
    118 uvlong	nhgetv(void*);
    119 ushort	nhgets(void*);
    120 ushort	ptclbsum(uchar*, int);
    121 
    122 int	v6tov4(uchar*, uchar*);
    123 void	v4tov6(uchar*, uchar*);
    124 
    125 #define	ipcmp(x, y) memcmp(x, y, IPaddrlen)
    126 #define	ipmove(x, y) memmove(x, y, IPaddrlen)
    127 
    128 extern uchar IPv4bcast[IPaddrlen];
    129 extern uchar IPv4bcastobs[IPaddrlen];
    130 extern uchar IPv4allsys[IPaddrlen];
    131 extern uchar IPv4allrouter[IPaddrlen];
    132 extern uchar IPnoaddr[IPaddrlen];
    133 extern uchar v4prefix[IPaddrlen];
    134 extern uchar IPallbits[IPaddrlen];
    135 
    136 #define CLASS(p) ((*(uchar*)(p))>>6)
    137 
    138 #if defined(__cplusplus)
    139 }
    140 #endif
    141 #endif