xref: /csrg-svn/sys/netns/ns.h (revision 21482)
1 /*      ns.h     6.1     85/05/30     */
2 
3 /*
4  * Constants and Structures defined by the Xerox Network Software
5  * per "Internet Transport Protocols", XSIS 028112, December 1981
6  */
7 
8 /*
9  * Protocols
10  */
11 #define NSPROTO_RI	1		/* Routing Information */
12 #define NSPROTO_ECHO	2		/* Echo Protocol */
13 #define NSPROTO_ERROR	3		/* Error Protocol */
14 #define NSPROTO_PE	4		/* Packet Exchange */
15 #define NSPROTO_SPP	5		/* Sequenced Packet */
16 #define NSPROTO_RAW	255		/* Placemarker*/
17 #define NSPROTO_MAX	256		/* Placemarker*/
18 
19 
20 /*
21  * Port/Socket numbers: network standard functions
22  */
23 
24 #define NSPORT_RI	1		/* Routing Information */
25 #define NSPORT_ECHO	2		/* Echo */
26 #define NSPORT_RE	3		/* Router Error */
27 
28 /*
29  * Ports < NSPORT_RESERVED are reserved for priveleged
30  * processes (e.g. root).
31  */
32 #define NSPORT_RESERVED		3000
33 
34 /* flags passed to ns_output as last parameter */
35 
36 #define	NS_FORWARDING		0x1	/* most of idp header exists */
37 #define	NS_ROUTETOIF		0x10	/* same as SO_DONTROUTE */
38 #define	NS_ALLOWBROADCAST	SS_PRIV	/* can send broadcast packets */
39 
40 #define NS_MAXHOPS		15
41 
42 /* flags passed to get/set socket option */
43 #define	SO_HEADERS_ON_INPUT	1
44 #define	SO_HEADERS_ON_OUTPUT	2
45 #define	SO_DEFAULT_HEADERS	3
46 #define	SO_LAST_HEADER		4
47 #define	SO_NSIP_ROUTE		5
48 
49 
50 /*
51  * NS addressing
52  */
53 union ns_host {
54 	u_char	c_host[6];
55 	u_short	s_host[3];
56 };
57 
58 union ns_net {
59 	u_char	c_net[4];
60 	u_short	s_net[2];
61 };
62 
63 struct ns_addr {
64 	union ns_net	x_net;
65 	union ns_host	x_host;
66 	u_short	x_port;
67 };
68 
69 /*
70  * Socket address, Xerox style
71  */
72 struct sockaddr_ns {
73 	short		sns_family;
74 	struct ns_addr	sns_addr;
75 	char		sns_zero[4];
76 };
77 #define sns_port sns_addr.x_port
78 
79 #define ns_netof(a) (*(long *) & ((a).x_net))
80 #define satons_addr(sa)	(((struct sockaddr_ns *)&(sa))->sns_addr)
81 #define ns_hosteqnh(s,t) ((s).s_host[0] == (t).s_host[0] && \
82 	(s).s_host[1] == (t).s_host[1] && (s).s_host[2] == (t).s_host[2])
83 #define ns_hosteq(s,t) (ns_hosteqnh((s).x_host,(t).x_host))
84 #define ns_nullhost(x) (((x).x_host.s_host[0]==0) && \
85 	((x).x_host.s_host[1]==0) && ((x).x_host.s_host[2]==0))
86 
87 #if !defined(vax)
88 #if !defined(INET)
89 /*
90  * Macros for number representation conversion.
91  */
92 #define	ntohl(x)	(x)
93 #define	ntohs(x)	(x)
94 #define	htonl(x)	(x)
95 #define	htons(x)	(x)
96 #endif
97 #endif
98 
99 #ifdef KERNEL
100 extern struct domain nsdomain;
101 extern union ns_host ns_thishost;
102 extern union ns_host ns_zerohost;
103 extern union ns_host ns_broadhost;
104 u_short ns_cksum();
105 #endif
106