diff options
Diffstat (limited to 'private/inc/sys/snet/ip_ctrl.h')
-rw-r--r-- | private/inc/sys/snet/ip_ctrl.h | 253 |
1 files changed, 253 insertions, 0 deletions
diff --git a/private/inc/sys/snet/ip_ctrl.h b/private/inc/sys/snet/ip_ctrl.h new file mode 100644 index 000000000..8abfaef8f --- /dev/null +++ b/private/inc/sys/snet/ip_ctrl.h @@ -0,0 +1,253 @@ +/*++ + +Copyright (c) 1991 Microsoft Corporation + +Module Name: + + ip_ctrl.h + +Abstract: + + This file contains the user-level STREAMS ioctl interface definitions + for the IP driver. + +Author: + + Eric Chin (ericc) July 18, 1991 + +Revision History: + +--*/ + +/****************************************************************** + * + * SpiderTCP Interface Primitives + * + * Copyright (c) 1988 Spider Systems Limited + * + * This Source Code is furnished under Licence, and may not be + * copied or distributed without express written agreement. + * + * All rights reserved. + * + * Written by Nick Felisiak, Ian Heavens, Peter Reid, + * Gavin Shearer, Mark Valentine + * + * IP_CONTROL.H + * + * IP Streams ioctl primitives for TCP/IP on V.3/V.4 Streams + * + ******************************************************************/ + +#ifndef _SYS_SNET_IP_CTRL_ +#define _SYS_SNET_IP_CTRL_ + +#ifndef SYSOBJLEN +#define SYSOBJLEN 32 +#endif + + +#define IP_NET_ADDR (('I'<<8)+1) /* IP registration from netd */ +#define ICMP_CTRL (('I'<<8)+2) /* control ICMP redirects */ +#define SET_IP_CTRL (('I'<<8)+3) /* set IP control information */ +#define GET_IP_CTRL (('I'<<8)+4) /* get IP control information */ +#ifdef MULTIH +#define ADD_IPNET IP_NET_ADDR /* add IP network to this interface */ +#define SHOW_IPNET (('I'<<8)+5) /* dump IP network information */ +#define DEL_IPNET (('I'<<8)+6) /* delete IP network from interface */ +#define ADD_IPADDR (('I'<<8)+7) /* add IP address to this interface */ +#define SHOW_IPADDR (('I'<<8)+8) /* dump IP address information */ +#define DEL_IPADDR (('I'<<8)+9) /* delete IP address from interface */ +#endif + +#define GET_ALL_INTERFACES 1 +#define GET_INTERFACE_INFO 2 +#ifdef HOSTREQ_MAYBE +#define SET_INTERFACE_INFO 3 +#endif +#define GATE_ACCESS 4 + + + +/* + * ** netd registration ** + */ + +typedef struct net_addr { + int muxid; + long inaddr; + long subnet_mask; + char forward_bdcst; + char keepalive; + short mtu; + short router_mtu; + char if_broadcast; +} NET_ADDRS; + + + +/* + * ** routing cache access ** + */ + +/* + * Gateway access structures etc. + */ +struct gate_access { + char flush; + char smart; + short command; + long dest; + long gate; +}; + + +/* + * routing cache access command values (subcodes of GATE_ACCESS) + */ + +#define GATE_PRINT 1 +#define GATE_ADD 2 +#define GATE_DEL 3 +#define GATE_CHANGE 4 + +#define WILD_CARD -1L /* to indicate that all networks should be acted on */ + +/* + * routing cache definitions + */ + +#ifdef COMPILE_UP_TCPIP + +#define GWAY_TIMEOUT 30 + +typedef struct gw_hashentry { + long from; /* network */ + long to; /* default gateway, if it exists */ + long redirect; /* ICMP Redirect gateway, if it exists */ + long active_gw; /* 1 = gateway is active, 0 = not active */ + short count; /* Counter for timer */ + /* + * "from" is equivalent to "ipRouteDest", + * and "to" or "redirect" is equivalent to "ipRouteNextHop" + */ + long saveProto; /* saved protocol when doing a redirect */ + long ipRouteIfIndex; /* index of local IF for this route */ + long ipRouteMetric1; /* Primary routing metric */ + long ipRouteMetric2; /* Alternate routing metric */ + long ipRouteMetric3; /* Alternate routing metric */ + long ipRouteMetric4; /* Alternate routing metric */ + long ipRouteMetric5; /* Alternate routing metric */ + long ipRouteType; /* Type of this route */ + long ipRouteProto; /* How this route was learned */ + long ipRouteAge; /* time this route was updated */ + long ipRouteMask; /* Subnet Mask for Route */ + unsigned char ipRouteInfoLen; /* length of object ID */ + unsigned long ipRouteInfo[SYSOBJLEN]; /* object ID of product specific stuf*/ +} GW_HASHENTRY; + +#else /* COMPILE_UP_TCPIP */ + +#define GWAY_LIFE 300 /* 5 minute timeout in seconds */ + +typedef struct gw_hashentry { + long from; /* network */ + long to; /* default gateway, if it exists */ + long redirect; /* ICMP Redirect gateway, if it exists */ + long active_gw; /* 1 = gateway is active, 0 = not active */ + /* + * "from" is equivalent to "ipRouteDest", + * and "to" or "redirect" is equivalent to "ipRouteNextHop" + */ + long saveProto; /* saved protocol when doing a redirect */ + long ipRouteIfIndex; /* index of local IF for this route */ + long ipRouteMetric1; /* Primary routing metric */ + long ipRouteMetric2; /* Alternate routing metric */ + long ipRouteMetric3; /* Alternate routing metric */ + long ipRouteMetric4; /* Alternate routing metric */ + long ipRouteMetric5; /* Alternate routing metric */ + long ipRouteType; /* Type of this route */ + long ipRouteProto; /* How this route was learned */ + long ipRouteAge; /* time this route was updated */ + long ipRouteMask; /* Subnet Mask for Route */ + unsigned char ipRouteInfoLen; /* length of object ID */ + unsigned long ipRouteInfo[SYSOBJLEN]; /* object ID of product specific stuf*/ +} GW_HASHENTRY; + +#endif /* COMPILE_UP_TCPIP */ + + + +/* + * Subnet mux table entry data. This structure is a subset of the + * kernel-level structure. They must match. This is a maintenance + * headache, but to remedy it, the IP code would have to be modified + * to make this structure a subfield of the real table structure. + */ + +#ifdef COMPILE_UP_TCPIP + +typedef struct net_interface_data { + long inaddr; /* network internet address */ + long net_num; /* network number */ + long subnet_num; /* subnet number */ + long subnet_mask; /* subnet mask */ + long sn_bdcst1; /* subnet broadcast :all zeroes */ + long sn_bdcst2; /* subnet broadcast :all 1's */ + long net_bdcst1; /* network broadcast :all zeroes */ + long net_bdcst2; /* network broadcast :all 1's */ + int frag_size; /* max allowable fragment size for subnet */ + int opt_size; /* optimum size (may be same as frag_size) */ + short int_flags; /* interface flags (see below) */ + short blocked; /* true if interface is blocked */ +#ifdef HOSTREQ_MAYBE + union { + long bdcast_addr; + long dst_addr; + } addr; /* broadcast address, or dest address for SLIP */ +# define if_broadcast addr.bdcast_addr +# define if_destination addr.dst_addr +#endif + int lower_snmp; /* true if lower interface supports SNMP */ + long status; /* status: up, down, or testing */ + time_t change; /* time state was entered */ + long if_broadcast; /* preferred network broadcast */ + long if_snbroadcast; /* preferred subnet broadcast */ +} NET_INTERFACE_DATA; + +#else /* COMPILE_UP_TCPIP */ + +typedef struct net_interface_data { + long inaddr; /* network internet address */ + long net_num; /* network number */ + long subnet_num; /* subnet number */ + long subnet_mask; /* subnet mask */ + long sn_bdcst1; /* subnet broadcast :all zeroes */ + long sn_bdcst2; /* subnet broadcast :all 1's */ + long net_bdcst1; /* network broadcast :all zeroes */ + long net_bdcst2; /* network broadcast :all 1's */ + int frag_size; /* max allowable fragment size for subnet */ + int opt_size; /* optimum size (may be same as frag_size) */ + short int_flags; /* interface flags */ + short user_flags; /* user flags */ + short blocked; /* true if interface is blocked */ + +#ifdef HOSTREQ_MAYBE + union { + long bdcast_addr; + long dst_addr; + } addr; /* broadcast address, or dest address for SLIP */ +# define if_broadcast addr.bdcast_addr +# define if_destination addr.dst_addr +#endif + + int lower_snmp; /* true if lower interface supports SNMP */ + long status; /* status: up, down, or testing */ + time_t change; /* time state was entered */ + long if_broadcast; /* preferred network broadcast */ + long if_snbroadcast; /* preferred subnet broadcast */ +} NET_INTERFACE_DATA; + +#endif /* COMPILE_UP_TCPIP */ + +#endif /* _SYS_SNET_IP_CTRL_ */ |