summaryrefslogtreecommitdiff
path: root/sys/include/ip.h
diff options
context:
space:
mode:
authorTaru Karttunen <taruti@taruti.net>2011-03-30 16:47:56 +0300
committerTaru Karttunen <taruti@taruti.net>2011-03-30 16:47:56 +0300
commitc558a99e0be506a9abdf677f0ca4490644e05fc1 (patch)
tree17aef678ad05a32ef96ce8385703cb3fe089a5c7 /sys/include/ip.h
parente5888a1ffdae813d7575f5fb02275c6bb07e5199 (diff)
Import sources from 2011-03-30 iso image - sys/include
Diffstat (limited to 'sys/include/ip.h')
-rwxr-xr-xsys/include/ip.h202
1 files changed, 202 insertions, 0 deletions
diff --git a/sys/include/ip.h b/sys/include/ip.h
new file mode 100755
index 000000000..a719a1b41
--- /dev/null
+++ b/sys/include/ip.h
@@ -0,0 +1,202 @@
+#pragma src "/sys/src/libip"
+#pragma lib "libip.a"
+
+enum
+{
+ IPaddrlen= 16,
+ IPv4addrlen= 4,
+ IPv4off= 12,
+ IPllen= 4,
+ IPV4HDR_LEN= 20,
+
+ /* vihl & vcf[0] values */
+ IP_VER4= 0x40,
+ IP_VER6= 0x60,
+};
+
+/*
+ * 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;
+};
+
+#define ISIPV6MCAST(addr) ((addr)[0] == 0xff)
+#define ISIPV6LINKLOCAL(addr) ((addr)[0] == 0xfe && ((addr)[1] & 0xc0) == 0x80)
+
+/*
+ * ipv6 constants
+ * `ra' is `router advertisement', `rs' is `router solicitation'.
+ * `na' is `neighbour advertisement'.
+ */
+enum {
+ IPV6HDR_LEN = 40,
+
+ /* neighbour discovery option types */
+ V6nd_srclladdr = 1,
+ V6nd_targlladdr = 2,
+ V6nd_pfxinfo = 3,
+ V6nd_redirhdr = 4,
+ V6nd_mtu = 5,
+ /* new since rfc2461; see iana.org/assignments/icmpv6-parameters */
+ V6nd_home = 8,
+ V6nd_srcaddrs = 9, /* rfc3122 */
+ V6nd_ip = 17,
+ /* /lib/rfc/drafts/draft-jeong-dnsop-ipv6-dns-discovery-12.txt */
+ V6nd_rdns = 25,
+ /* plan 9 extensions */
+ V6nd_9fs = 250,
+ V6nd_9auth = 251,
+
+ /* Router constants (all times in ms.) */
+ Maxv6initraintvl= 16000,
+ Maxv6initras = 3,
+ Maxv6finalras = 3,
+ Minv6interradelay= 3000,
+ Maxv6radelay = 500,
+
+ /* Host constants */
+ Maxv6rsdelay = 1000,
+ V6rsintvl = 4000,
+ Maxv6rss = 3,
+
+ /* Node constants */
+ Maxv6mcastrss = 3,
+ Maxv6unicastrss = 3,
+ Maxv6anycastdelay= 1000,
+ Maxv6na = 3,
+ V6reachabletime = 30000,
+ V6retranstimer = 1000,
+ V6initprobedelay= 5000,
+};
+
+/* V6 header on the wire */
+typedef struct Ip6hdr Ip6hdr;
+struct Ip6hdr {
+ uchar vcf[4]; /* version:4, traffic class:8, flow label:20 */
+ uchar ploadlen[2]; /* payload length: packet length - 40 */
+ uchar proto; /* next header type */
+ uchar ttl; /* hop limit */
+ uchar src[IPaddrlen]; /* source address */
+ uchar dst[IPaddrlen]; /* destination address */
+ uchar payload[];
+};
+
+/*
+ * user-level icmpv6 with control message "headers"
+ */
+typedef struct Icmp6hdr Icmp6hdr;
+struct Icmp6hdr {
+ uchar _0_[8];
+ uchar laddr[IPaddrlen]; /* local address */
+ uchar raddr[IPaddrlen]; /* remote address */
+};
+
+/*
+ * user level udp headers with control message "headers"
+ */
+enum
+{
+ Udphdrsize= 52, /* size of a Udphdr */
+};
+
+typedef struct Udphdr Udphdr;
+struct Udphdr
+{
+ uchar raddr[IPaddrlen]; /* V6 remote address */
+ uchar laddr[IPaddrlen]; /* V6 local address */
+ uchar ifcaddr[IPaddrlen]; /* V6 ifc addr msg was received on */
+ uchar rport[2]; /* remote port */
+ uchar lport[2]; /* local port */
+};
+
+uchar* defmask(uchar*);
+void maskip(uchar*, uchar*, uchar*);
+int eipfmt(Fmt*);
+int isv4(uchar*);
+vlong parseip(uchar*, char*);
+vlong 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 equivip4(uchar*, uchar*);
+int equivip6(uchar*, uchar*);
+
+Ipifc* readipifc(char*, Ipifc*, int);
+
+void hnputv(void*, uvlong);
+void hnputl(void*, uint);
+void hnputs(void*, ushort);
+uvlong nhgetv(void*);
+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)
+
+#pragma varargck type "I" uchar*
+#pragma varargck type "V" uchar*
+#pragma varargck type "E" uchar*
+#pragma varargck type "M" uchar*