339 lines
11 KiB
C
339 lines
11 KiB
C
|
/*
|
||
|
*============================================================================
|
||
|
* Copyright (c) 1994-95, Microsoft Corp.
|
||
|
*
|
||
|
* File: map.h
|
||
|
*
|
||
|
* Contains declarations for the functions that map old style routetab
|
||
|
* functions to the iphlpapi functions.
|
||
|
*
|
||
|
* AddRoute
|
||
|
* DeleteRoute
|
||
|
* GetRouteTable
|
||
|
* FreeRouteTable
|
||
|
* GetInterfaceTable
|
||
|
* FreeInterfaceTable
|
||
|
*
|
||
|
* The structures required by these functions are also declared here:
|
||
|
*
|
||
|
* IPROUTING_ENTRY
|
||
|
* IPINTERFACE_ENTRY
|
||
|
*
|
||
|
* Routes can be added to and deleted from the IP routing table by other
|
||
|
* means. Therefore, it is necessary for any protocol using these functions
|
||
|
* to reload the routing tables periodically.
|
||
|
*============================================================================
|
||
|
*/
|
||
|
|
||
|
#ifndef _MAP_H_
|
||
|
#define _MAP_H_
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*---------------------------------------------------------------
|
||
|
* Any one of these values can be passed as the route entry type
|
||
|
* when calling the AddRoute() function.
|
||
|
*---------------------------------------------------------------
|
||
|
*/
|
||
|
#define IRE_TYPE_OTHER 1
|
||
|
#define IRE_TYPE_INVALID 2
|
||
|
#define IRE_TYPE_DIRECT 3
|
||
|
#define IRE_TYPE_INDIRECT 4
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*-------------------------------------------------------------
|
||
|
* Any one of these values can be passed as the protocol type
|
||
|
* when calling AddRoute() or DeleteRoute()
|
||
|
*-------------------------------------------------------------
|
||
|
*/
|
||
|
#define IRE_PROTO_OTHER 1
|
||
|
#define IRE_PROTO_LOCAL 2
|
||
|
#define IRE_PROTO_NETMGMT 3
|
||
|
#define IRE_PROTO_ICMP 4
|
||
|
#define IRE_PROTO_EGP 5
|
||
|
#define IRE_PROTO_GGP 6
|
||
|
#define IRE_PROTO_HELLO 7
|
||
|
#define IRE_PROTO_RIP 8
|
||
|
#define IRE_PROTO_IS_IS 9
|
||
|
#define IRE_PROTO_ES_IS 10
|
||
|
#define IRE_PROTO_CISCO 11
|
||
|
#define IRE_PROTO_BBN 12
|
||
|
#define IRE_PROTO_OSPF 13
|
||
|
#define IRE_PROTO_BGP 14
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*-------------------------------------------------------------
|
||
|
* This value may be passed as the metric to functions which
|
||
|
* require a metric, in cases where the metric is irrelevant
|
||
|
*-------------------------------------------------------------
|
||
|
*/
|
||
|
#define IRE_METRIC_UNUSED 0xffffffff
|
||
|
|
||
|
|
||
|
/*
|
||
|
*-------------------------------------------------------------
|
||
|
* These constants are used in the definition of IF_ENTRY
|
||
|
*-------------------------------------------------------------
|
||
|
*/
|
||
|
#define MAX_PHYSADDR_SIZE 8
|
||
|
#define MAX_IFDESCR_LEN 256
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*-------------------------------------------------------------
|
||
|
* This structure is used by GetIPAddressTable() to return
|
||
|
* information about logical IP interfaces on the system
|
||
|
*-------------------------------------------------------------
|
||
|
*/
|
||
|
typedef struct _IPADDRESS_ENTRY {
|
||
|
DWORD iae_address; /* IP address of this entry */
|
||
|
DWORD iae_index; /* index of interface for this entry */
|
||
|
DWORD iae_netmask; /* subnet mask of this entry */
|
||
|
DWORD iae_bcastaddr;
|
||
|
DWORD iae_reasmsize;
|
||
|
USHORT iae_context;
|
||
|
USHORT iae_pad;
|
||
|
} IPADDRESS_ENTRY, *LPIPADDRESS_ENTRY;
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*-------------------------------------------------------------
|
||
|
* This structure is used by GetRouteTable() to return
|
||
|
* information about routing table entries.
|
||
|
*-------------------------------------------------------------
|
||
|
*/
|
||
|
typedef struct _IPROUTE_ENTRY {
|
||
|
DWORD ire_dest; /* destination IP addr, network order */
|
||
|
DWORD ire_mask; /* network mask, network order */
|
||
|
DWORD ire_policy; /* policy duh(?) */
|
||
|
DWORD ire_nexthop; /* next hop IP addr, network order */
|
||
|
DWORD ire_index; /* route entry index */
|
||
|
DWORD ire_type; /* routing type for this entry */
|
||
|
DWORD ire_proto; /* routing protocol for this entry */
|
||
|
DWORD ire_age; /* age of this entry */
|
||
|
DWORD ire_nexthopas; /* next hop as */
|
||
|
DWORD ire_metric1; /* destination metric, host order */
|
||
|
DWORD ire_metric2; /* unused */
|
||
|
DWORD ire_metric3; /* unused */
|
||
|
DWORD ire_metric4; /* unused */
|
||
|
DWORD ire_metric5; /* unused */
|
||
|
} IPROUTE_ENTRY, *LPIPROUTE_ENTRY;
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: GetIPAddressTable
|
||
|
*
|
||
|
* Parameters:
|
||
|
* LPIPADDRESS_ENTRY
|
||
|
* *lplpAddrTable pointer to an LPIPADDRESS_ENTRY
|
||
|
* which receives the IP address table
|
||
|
* LPDWORD lpdwAddrCount pointer to a DWORD which receives
|
||
|
* the number of addresses in the table
|
||
|
*
|
||
|
* This function allocates and fills in an array of address entry
|
||
|
* structures corresponding to the logical IP interfaces in
|
||
|
* the system. It also stores the number of entries in the array
|
||
|
* in the DWORD pointed to by lpdwAddrCount.
|
||
|
*
|
||
|
* Call FreeIPAddressTable to free the memory allocated for the
|
||
|
* address table.
|
||
|
*
|
||
|
* If the function fails, it sets *lpdwAddrCount to zero and
|
||
|
* *lplpAddrTable to NULL.
|
||
|
*
|
||
|
* It returns 0 if successful and non-zero otherwise
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
GetIPAddressTable(
|
||
|
OUT PMIB_IPADDRROW *lplpAddrTable,
|
||
|
OUT LPDWORD lpdwAddrCount
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: FreeIPAddressTable
|
||
|
*
|
||
|
* Parameters:
|
||
|
* LPIPADDRESS_ENTRY
|
||
|
* lpAddrTable the address table to be freed.
|
||
|
*
|
||
|
* This function frees the memory allocated for an address table.
|
||
|
* It returns 0 if successful and non-zero otherwise.
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
FreeIPAddressTable(
|
||
|
IN PMIB_IPADDRROW lpAddrTable
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: GetRouteTable
|
||
|
*
|
||
|
* Parameters:
|
||
|
* LPIPROUTE_ENTRY
|
||
|
* *lplpRouteTable pointer to an LPIPROUTE_ENTRY
|
||
|
* which receives the routing table
|
||
|
* DWORD *lpdwRouteCount pointer to a DWORD which receives
|
||
|
* the number of routing entries
|
||
|
*
|
||
|
* This function allocates and fills in an array of routing table
|
||
|
* entries from the Tcpip driver. It also sets the number of
|
||
|
* entries in the array in the DWORD pointed to by lpdwRouteCount.
|
||
|
*
|
||
|
* In the IPROUTE_ENTRY structure, the only metric used by
|
||
|
* the Tcpip stack is IPROUTE_ENTRY.ire_metric1; the other metric
|
||
|
* fields should be ignored.
|
||
|
*
|
||
|
* Call FreeRouteTable to free the memory allocated for the
|
||
|
* routing table.
|
||
|
*
|
||
|
* If the function fails, it sets *lpdwRouteCount to zero and
|
||
|
* *lplpRouteTable to NULL.
|
||
|
*
|
||
|
* It returns 0 if successful and non-zero otherwise
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
GetRouteTable(
|
||
|
OUT LPIPROUTE_ENTRY *lplpRouteTable,
|
||
|
OUT LPDWORD lpdwRouteCount
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: FreeRouteTable
|
||
|
*
|
||
|
* Parameters:
|
||
|
* LPIPROUTE_ENTRY
|
||
|
* lpRouteTable the routing table to be freed.
|
||
|
*
|
||
|
* This function frees the memory allocated for a routing table.
|
||
|
* It returns 0 if successful and non-zero otherwise.
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
FreeRouteTable(
|
||
|
IN LPIPROUTE_ENTRY lpRouteTable
|
||
|
);
|
||
|
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: AddRoute
|
||
|
*
|
||
|
* Parameters:
|
||
|
* DWORD dwProtocol protocol of specified route
|
||
|
* DWORD dwType type of specified route
|
||
|
* DWORD dwIndex index of interface on which to add
|
||
|
* DWORD dwDestVal destination IP addr (network order)
|
||
|
* DWORD dwMaskVal destination subnet mask, or zero
|
||
|
* if no subnet (network order)
|
||
|
* DWORD dwGateVal next hop IP addr (network order)
|
||
|
* DWORD dwMetric metric
|
||
|
*
|
||
|
* This function adds a new route (or updates an existing route)
|
||
|
* for the specified protocol, on the specified interface.
|
||
|
* (See above for values which can be used as protocol numbers,
|
||
|
* as well as values which can be used as route entry types.)
|
||
|
* If the route identified by dwIndex.dwDestVal.dwMaskVal.dwGateVal
|
||
|
* already exists, it is updated with the specified protocol,
|
||
|
* type, and metric.
|
||
|
* The TCP stack will return an error on an attempt to add a route
|
||
|
* whose destination is destination is longer than its mask.
|
||
|
* In other words, this function fails if (dwDestVal & ~dwMaskVal)
|
||
|
* is non-zero.
|
||
|
*
|
||
|
* Returns 0 if successful, non-zero otherwise.
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
AddRoute(
|
||
|
IN DWORD dwProtocol,
|
||
|
IN DWORD dwType,
|
||
|
IN DWORD dwIndex,
|
||
|
IN DWORD dwDestVal,
|
||
|
IN DWORD dwMaskVal,
|
||
|
IN DWORD dwGateVal,
|
||
|
IN DWORD dwMetric
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: DeleteRoute
|
||
|
*
|
||
|
* Parameters:
|
||
|
* DWORD dwIndex index of interface from which to delete
|
||
|
* DWORD dwDestVal destination IP addr (network order)
|
||
|
* DWORD dwMaskVal subnet mask (network order)
|
||
|
* DWORD dwGateVal next hop IP addr (network order)
|
||
|
*
|
||
|
* This function deletes a route to the specified destination.
|
||
|
*
|
||
|
* Returns 0 if successful, non-zero otherwise.
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
DeleteRoute(
|
||
|
IN DWORD dwIndex,
|
||
|
IN DWORD dwDestVal,
|
||
|
IN DWORD dwMaskVal,
|
||
|
IN DWORD dwGateVal
|
||
|
);
|
||
|
|
||
|
|
||
|
/*
|
||
|
*------------------------------------------------------------------
|
||
|
* Function: ReloadIPAddressTable
|
||
|
*
|
||
|
* Parameters:
|
||
|
* LPIPADDRESS_ENTRY
|
||
|
* *lplpAddrTable pointer to an LPIPADDRESS_ENTRY
|
||
|
* which receives the IP address table
|
||
|
* LPDWORD lpdwAddrCount pointer to a DWORD which receives
|
||
|
* the number of addresses in the table
|
||
|
*
|
||
|
* This function first queries the TCP/IP stack to rebuild its
|
||
|
* IP interface and IP address tables.
|
||
|
* Then this function allocates and fills in an array of address entry
|
||
|
* structures corresponding to the logical IP interfaces in
|
||
|
* the system. It also stores the number of entries in the array
|
||
|
* in the DWORD pointed to by lpdwAddrCount.
|
||
|
*
|
||
|
* Call FreeIPAddressTable to free the memory allocated for the
|
||
|
* address table.
|
||
|
*
|
||
|
* If the function fails, it sets *lpdwAddrCount to zero and
|
||
|
* *lplpAddrTable to NULL.
|
||
|
*
|
||
|
* It returns 0 if successful and non-zero otherwise
|
||
|
*------------------------------------------------------------------
|
||
|
*/
|
||
|
DWORD
|
||
|
ReloadIPAddressTable(
|
||
|
OUT PMIB_IPADDRROW *lplpAddrTable,
|
||
|
OUT LPDWORD lpdwAddrCount
|
||
|
);
|
||
|
|
||
|
|
||
|
#endif /* _MAP_H_ */
|
||
|
|