2020-09-30 17:17:25 +02:00

254 lines
8.7 KiB
C
Raw Permalink Blame History

This file contains invisible Unicode characters

This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

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