aboutsummaryrefslogtreecommitdiff
path: root/include/ip.h
diff options
context:
space:
mode:
authorrsc <devnull@localhost>2003-11-23 18:25:35 +0000
committerrsc <devnull@localhost>2003-11-23 18:25:35 +0000
commit97a5e5f2dd40eff09cb650c91c21f680b6d4206a (patch)
tree1a5b4768a225e33683b1b8562b9dfa9f8d14e176 /include/ip.h
parent9e37bb03b38a732af1897289b2f519dbd74cd371 (diff)
downloadplan9port-97a5e5f2dd40eff09cb650c91c21f680b6d4206a.tar.gz
plan9port-97a5e5f2dd40eff09cb650c91c21f680b6d4206a.tar.bz2
plan9port-97a5e5f2dd40eff09cb650c91c21f680b6d4206a.zip
new files
Diffstat (limited to 'include/ip.h')
-rw-r--r--include/ip.h123
1 files changed, 123 insertions, 0 deletions
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)
+