From 97a5e5f2dd40eff09cb650c91c21f680b6d4206a Mon Sep 17 00:00:00 2001 From: rsc Date: Sun, 23 Nov 2003 18:25:35 +0000 Subject: new files --- include/ip.h | 123 +++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 123 insertions(+) create mode 100644 include/ip.h (limited to 'include/ip.h') diff --git a/include/ip.h b/include/ip.h new file mode 100644 index 00000000..af82c993 --- /dev/null +++ b/include/ip.h @@ -0,0 +1,123 @@ +/* +#pragma src "/sys/src/libip" +#pragma lib "libip.a" +#pragma varargck type "I" uchar* +#pragma varargck type "V" uchar* +#pragma varargck type "E" uchar* +#pragma varargck type "M" uchar* +*/ +enum +{ + IPaddrlen= 16, + IPv4addrlen= 4, + IPv4off= 12, + IPllen= 4, +}; + +/* + * for reading /net/ipifc + */ +typedef struct Ipifc Ipifc; +typedef struct Iplifc Iplifc; +typedef struct Ipv6rp Ipv6rp; + +/* local address */ +struct Iplifc +{ + Iplifc *next; + + /* per address on the ip interface */ + uchar ip[IPaddrlen]; + uchar mask[IPaddrlen]; + uchar net[IPaddrlen]; /* ip & mask */ + ulong preflt; /* preferred lifetime */ + ulong validlt; /* valid lifetime */ +}; + +/* default values, one per stack */ +struct Ipv6rp +{ + int mflag; + int oflag; + int maxraint; + int minraint; + int linkmtu; + int reachtime; + int rxmitra; + int ttl; + int routerlt; +}; + +/* actual interface */ +struct Ipifc +{ + Ipifc *next; + Iplifc *lifc; + + /* per ip interface */ + int index; /* number of interface in ipifc dir */ + char dev[64]; + uchar sendra6; /* on == send router adv */ + uchar recvra6; /* on == rcv router adv */ + int mtu; + ulong pktin; + ulong pktout; + ulong errin; + ulong errout; + Ipv6rp rp; +}; + +/* + * user level udp headers + */ +enum +{ + Udphdrsize= 36, /* size of a Udphdr */ +}; + +typedef struct Udphdr Udphdr; +struct Udphdr +{ + uchar raddr[IPaddrlen]; /* remote address and port */ + uchar laddr[IPaddrlen]; /* local address and port */ + uchar rport[2]; + uchar lport[2]; +}; + +uchar* defmask(uchar*); +void maskip(uchar*, uchar*, uchar*); +int eipfmt(Fmt*); +int isv4(uchar*); +ulong parseip(uchar*, char*); +ulong parseipmask(uchar*, char*); +char* v4parseip(uchar*, char*); +char* v4parsecidr(uchar*, uchar*, char*); +int parseether(uchar*, char*); +int myipaddr(uchar*, char*); +int myetheraddr(uchar*, char*); +int equivip(uchar*, uchar*); + +Ipifc* readipifc(char*, Ipifc*, int); + +void hnputl(void*, uint); +void hnputs(void*, ushort); +uint nhgetl(void*); +ushort nhgets(void*); +ushort ptclbsum(uchar*, int); + +int v6tov4(uchar*, uchar*); +void v4tov6(uchar*, uchar*); + +#define ipcmp(x, y) memcmp(x, y, IPaddrlen) +#define ipmove(x, y) memmove(x, y, IPaddrlen) + +extern uchar IPv4bcast[IPaddrlen]; +extern uchar IPv4bcastobs[IPaddrlen]; +extern uchar IPv4allsys[IPaddrlen]; +extern uchar IPv4allrouter[IPaddrlen]; +extern uchar IPnoaddr[IPaddrlen]; +extern uchar v4prefix[IPaddrlen]; +extern uchar IPallbits[IPaddrlen]; + +#define CLASS(p) ((*(uchar*)(p))>>6) + -- cgit v1.2.3