summaryrefslogtreecommitdiffstats
path: root/private/inc/sys/snet/ip_ctrl.h
diff options
context:
space:
mode:
Diffstat (limited to 'private/inc/sys/snet/ip_ctrl.h')
-rw-r--r--private/inc/sys/snet/ip_ctrl.h253
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_ */