| 1 | /* |
| 2 | * Copyright (c) 1984, 1985, 1986 Regents of the University of California. |
| 3 | * All rights reserved. The Berkeley software License Agreement |
| 4 | * specifies the terms and conditions for redistribution. |
| 5 | * |
| 6 | * @(#)ns.h 7.2 (Berkeley) %G% |
| 7 | */ |
| 8 | |
| 9 | /* |
| 10 | * Constants and Structures defined by the Xerox Network Software |
| 11 | * per "Internet Transport Protocols", XSIS 028112, December 1981 |
| 12 | */ |
| 13 | |
| 14 | /* |
| 15 | * Protocols |
| 16 | */ |
| 17 | #define NSPROTO_RI 1 /* Routing Information */ |
| 18 | #define NSPROTO_ECHO 2 /* Echo Protocol */ |
| 19 | #define NSPROTO_ERROR 3 /* Error Protocol */ |
| 20 | #define NSPROTO_PE 4 /* Packet Exchange */ |
| 21 | #define NSPROTO_SPP 5 /* Sequenced Packet */ |
| 22 | #define NSPROTO_RAW 255 /* Placemarker*/ |
| 23 | #define NSPROTO_MAX 256 /* Placemarker*/ |
| 24 | |
| 25 | |
| 26 | /* |
| 27 | * Port/Socket numbers: network standard functions |
| 28 | */ |
| 29 | |
| 30 | #define NSPORT_RI 1 /* Routing Information */ |
| 31 | #define NSPORT_ECHO 2 /* Echo */ |
| 32 | #define NSPORT_RE 3 /* Router Error */ |
| 33 | |
| 34 | /* |
| 35 | * Ports < NSPORT_RESERVED are reserved for priveleged |
| 36 | * processes (e.g. root). |
| 37 | */ |
| 38 | #define NSPORT_RESERVED 3000 |
| 39 | |
| 40 | /* flags passed to ns_output as last parameter */ |
| 41 | |
| 42 | #define NS_FORWARDING 0x1 /* most of idp header exists */ |
| 43 | #define NS_ROUTETOIF 0x10 /* same as SO_DONTROUTE */ |
| 44 | #define NS_ALLOWBROADCAST SO_BROADCAST /* can send broadcast packets */ |
| 45 | |
| 46 | #define NS_MAXHOPS 15 |
| 47 | |
| 48 | /* flags passed to get/set socket option */ |
| 49 | #define SO_HEADERS_ON_INPUT 1 |
| 50 | #define SO_HEADERS_ON_OUTPUT 2 |
| 51 | #define SO_DEFAULT_HEADERS 3 |
| 52 | #define SO_LAST_HEADER 4 |
| 53 | #define SO_NSIP_ROUTE 5 |
| 54 | #define SO_SEQNO 6 |
| 55 | #define SO_ALL_PACKETS 7 |
| 56 | #define SO_MTU 8 |
| 57 | |
| 58 | |
| 59 | /* |
| 60 | * NS addressing |
| 61 | */ |
| 62 | union ns_host { |
| 63 | u_char c_host[6]; |
| 64 | u_short s_host[3]; |
| 65 | }; |
| 66 | |
| 67 | union ns_net { |
| 68 | u_char c_net[4]; |
| 69 | u_short s_net[2]; |
| 70 | }; |
| 71 | |
| 72 | union ns_net_u { |
| 73 | union ns_net net_e; |
| 74 | u_long long_e; |
| 75 | }; |
| 76 | |
| 77 | struct ns_addr { |
| 78 | union ns_net x_net; |
| 79 | union ns_host x_host; |
| 80 | u_short x_port; |
| 81 | }; |
| 82 | |
| 83 | /* |
| 84 | * Socket address, Xerox style |
| 85 | */ |
| 86 | struct sockaddr_ns { |
| 87 | u_short sns_family; |
| 88 | struct ns_addr sns_addr; |
| 89 | char sns_zero[2]; |
| 90 | }; |
| 91 | #define sns_port sns_addr.x_port |
| 92 | |
| 93 | #ifdef vax |
| 94 | #define ns_netof(a) (*(long *) & ((a).x_net)) /* XXX - not needed */ |
| 95 | #endif |
| 96 | #define ns_neteqnn(a,b) (((a).s_net[0]==(b).s_net[0]) && \ |
| 97 | ((a).s_net[1]==(b).s_net[1])) |
| 98 | #define ns_neteq(a,b) ns_neteqnn((a).x_net, (b).x_net) |
| 99 | #define satons_addr(sa) (((struct sockaddr_ns *)&(sa))->sns_addr) |
| 100 | #define ns_hosteqnh(s,t) ((s).s_host[0] == (t).s_host[0] && \ |
| 101 | (s).s_host[1] == (t).s_host[1] && (s).s_host[2] == (t).s_host[2]) |
| 102 | #define ns_hosteq(s,t) (ns_hosteqnh((s).x_host,(t).x_host)) |
| 103 | #define ns_nullhost(x) (((x).x_host.s_host[0]==0) && \ |
| 104 | ((x).x_host.s_host[1]==0) && ((x).x_host.s_host[2]==0)) |
| 105 | |
| 106 | #ifdef KERNEL |
| 107 | extern struct domain nsdomain; |
| 108 | union ns_host ns_thishost; |
| 109 | union ns_host ns_zerohost; |
| 110 | union ns_host ns_broadhost; |
| 111 | union ns_net ns_zeronet; |
| 112 | union ns_net ns_broadnet; |
| 113 | u_short ns_cksum(); |
| 114 | #endif |