/*++ 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_ */