xref: /inferno-os/module/ip.m (revision 46439007cf417cbd9ac8049bb4122c890097a0fa)
1IP: module
2{
3	PATH:	con "/dis/lib/ip.dis";
4
5	IPaddrlen:	con 16;
6	IPv4addrlen:	con 4;
7	IPv4off: con 12;
8
9	IPaddr: adt {
10		a:	array of byte;
11
12		newv6:	fn(nil: array of byte): IPaddr;
13		newv4:	fn(nil: array of byte): IPaddr;
14		copy:	fn(nil: self IPaddr): IPaddr;
15		eq:	fn(nil: self IPaddr, v: IPaddr): int;
16		mask:	fn(nil: self IPaddr, m: IPaddr): IPaddr;
17		maskn:	fn(nil: self IPaddr, m: IPaddr): IPaddr;
18		isv4:	fn(nil: self IPaddr): int;
19		ismulticast:	fn(nil: self IPaddr): int;
20		isvalid:	fn(nil: self IPaddr): int;
21
22		v4:	fn(nil: self IPaddr): array of byte;
23		v6:	fn(nil: self IPaddr): array of byte;
24		class:	fn(nil: self IPaddr): int;
25		classmask:	fn(nil: self IPaddr): IPaddr;
26
27		parse:	fn(s: string): (int, IPaddr);
28		parsemask:	fn(s: string): (int, IPaddr);
29		parsecidr:	fn(s: string): (int, IPaddr, IPaddr);
30
31		text:	fn(nil: self IPaddr): string;
32		masktext:	fn(nil: self IPaddr): string;
33	};
34
35	v4bcast, v4allsys, v4allrouter, v4noaddr, noaddr, allbits, selfv6, selfv4: IPaddr;
36	v4prefix: array of byte;
37
38	Ifcaddr: adt {
39		ip:	IPaddr;
40		mask:	IPaddr;
41		net:	IPaddr;
42		preflt:	big;
43		validlt:	big;
44	};
45
46	Ipifc: adt {
47		index:	int;	# /net/ipifc/N
48		dev:	string;	# bound device
49		addrs:	list of ref Ifcaddr;
50		sendra:	int;	# !=0, send router adverts
51		recvra:	int;	# !=0, receive router adverts
52		mtu:	int;
53		pktin:	big;	# packets in
54		pktout:	big;	# packets out
55		errin:	big;	# input errors
56		errout:	big;	# output errors
57		rp:	IPv6rp;	# IPv6 route advert params
58	};
59
60	IPv6rp: adt {
61		mflag:	int;
62		oflag:	int;
63		maxraint:	int;	# max route advert interval
64		minraint:	int;	# min route advert interval
65		linkmtu:	int;
66		reachtime:	int;
67		rxmitra:	int;
68		ttl:	int;
69		routerlt:	int;
70	};
71
72	Udp4hdrlen:	con 2*IPv4addrlen+2*2;
73	OUdphdrlen:	con 2*IPaddrlen+2*2;
74
75	Udphdrlen:	con 52;
76	Udpraddr:	con 0;
77	Udpladdr: con Udpraddr + IPaddrlen;
78	Udpifcaddr: con Udpladdr + IPaddrlen;
79	Udprport: con Udpifcaddr + IPaddrlen;
80	Udplport: con Udprport + 2;
81
82	Udphdr: adt {
83		raddr:	IPaddr;
84		laddr:	IPaddr;
85		ifcaddr:	IPaddr;
86		rport:	int;
87		lport:	int;
88
89		new:		fn(): ref Udphdr;
90		unpack:	fn(a: array of byte, n: int): ref Udphdr;
91		pack:	fn(h: self ref Udphdr, a: array of byte, n: int);
92	};
93
94	init:	fn();
95	readipifc:	fn(net: string, index: int): (list of ref Ipifc, string);
96	addressesof:	fn(l: list of ref Ipifc, all: int): list of IPaddr;
97	interfaceof:	fn(l: list of ref Ipifc, ip: IPaddr): (ref Ipifc, ref Ifcaddr);
98	ownerof:	fn(l: list of ref Ipifc, ip: IPaddr): (ref Ipifc, ref Ifcaddr);
99
100	get2:	fn(a: array of byte, o: int): int;
101	put2:	fn(a: array of byte, o: int, v: int): int;
102	get4:	fn(a: array of byte, o: int): int;
103	put4:	fn(a: array of byte, o: int, v: int): int;
104};
105