Files
vxWorks/h/wrn/ospf/ospf_ip_structures.h
2025-08-20 18:25:46 +08:00

258 lines
6.6 KiB
C

/* ospf_ip_structures.h - OSPF IP structures */
/* Copyright 2000-2003 Wind River Systems, Inc. */
#include "copyright_wrs.h"
/*
modification history
___________________
03a,06aug03,agi ported to Accordion stack
02b,19nov02,mwv Merge TMS code SPR 84284
02a,07oct02,agi Fixed compiler warnings
01b,10oct01,jkw Added port_number back to IP_ROUTE_ENTRY structure.
01a,22sep01,kc Removed port_number from IP_ROUTE_ENTRY structure.
*/
#if !defined (__OSPF_IP_STRUCTURES_H__)
#define __OSPF_IP_STRUCTURES_H__
#if __DCC__
__packed__ enum IP_ROUTE_TYPE
#else
enum IP_ROUTE_TYPE
#endif
{
OTHER_ROUTE_TYPE = 0x01, /* none of the following */
INVALID_ROUTE_TYPE = 0x02, /* an invalidated route */
DIRECT_ROUTE_TYPE = 0x03, /* route to directly connected (sub-)network */
INDIRECT_ROUTE_TYPE = 0x04 /* route to a non-local host/(sub-)network */
#if __DCC__
};
#else
} _pack;
#endif
#if __DCC__
__packed__ enum IP_PROTOCOL_VALUE
#else
enum IP_PROTOCOL_VALUE
#endif
{
RESERVED_PROTOCOL = 0,
ICMP_PROTOCOL = 1,
IGMP_PROTOCOL = 2,
VX_IP_PROTOCOL = 4, /*
* Original name IP_PROTOCOL changed due
* to variable name collision in
* rwutil.h- V2 version
*/
TCP_PROTOCOL = 6,
IGP_PROTOCOL = 9,
UDP_PROTOCOL = 17,
IDRP_PROTOCOL = 45,
RSVP_PROTOCOL = 46,
GRE_PROTOCOL = 47,
IPSEC_ESP_PROTOCOL = 50,
IPSEC_AH_PROTOCOL = 51,
IGRP_PROTOCOL = 88,
OSPF_PROTOCOL = 89,
IPIP_PROTOCOL = 94,
ETHERIP_PROTOCOL = 97
#if __DCC__
};
#else
} _pack;
#endif
#if __DCC__
__packed__ enum IP_ROUTE_PROTOCOL_TYPE
#else
enum IP_ROUTE_PROTOCOL_TYPE
#endif
{
OTHER_ROUTING_PROTOCOL_TYPE = 0x01,
IP_ROUTING_PROTOCOL_TYPE = 0x01, /*
* IP_ROUTING_PROTOCOL_TYPE is
* intentionally defined as 1
* as well
*/
LOCALLY_CONFIGURED_TYPE = 0x02,
NETWORK_MANAGEMENT_PROTOCOL_TYPE = 0x03,
ICMP_PROTOCOL_TYPE = 0x04,
EGP_PROTOCOL_TYPE = 0x05,
GGP_PROTOCOL_TYPE = 0x06,
HELLO_PROTOCOL_TYPE = 0x07,
RIP_PROTOCOL_TYPE = 0x08,
IS_IS_PROTOCOL_TYPE = 0x09,
ES_IS_PROTOCOL_TYPE = 0x0a,
CISCO_IGRP_TYPE = 0x0b,
BBN_SPF_IGP_TYPE = 0x0c,
OSPF_PROTOCOL_TYPE = 0x0d,
BGP_PROTOCOL_TYPE = 0x0e
#if __DCC__
};
#else
} _pack;
#endif
#if __DCC__
__packed__ enum IP_ROUTE_OPERATION
#else
enum IP_ROUTE_OPERATION
#endif
{
ADD_IP_ROUTE = 0x01,
DELETE_IP_ROUTE = 0x02
#if __DCC__
};
#else
} _pack;
#endif
typedef _struct SERVICE_TYPE_BIT_STRUCTURE
{
#if (_BYTE_ORDER == _LITTLE_ENDIAN )
unsigned char unused:2;
unsigned char high_reliability:1;
unsigned char high_throughput:1;
unsigned char low_delay:1;
unsigned char precedence:3;
#else /* _BYTE_ORDER == _BIG_ENDIAN */
unsigned char precedence:3;
unsigned char low_delay:1;
unsigned char high_throughput:1;
unsigned char high_reliability:1;
unsigned char unused:2;
#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
} _pack SERVICE_TYPE_BIT_STRUCTURE;
typedef _union UNION_SERVICE_TYPE_BIT_STRUCTURE
{
SERVICE_TYPE_BIT_STRUCTURE _bit;
BYTE _byte;
} _pack UNION_SERVICE_TYPE_BIT_STRUCTURE;
typedef _union UNION_USER_OPTIONS
{
BYTE char_options[MAXIMUM_IP_OPTION_LENGTH]; /* according to rfc791 format in network order */
ULONG ulong_options[MAXIMUM_IP_OPTION_LENGTH / sizeof (ULONG)];
} _pack UNION_USER_OPTIONS;
typedef _struct IP_UPPER_LAYER_PARAMETERS
{
ULONG source_address;
ULONG destination_address;
BYTE_ENUM (BOOLEAN) do_not_fragment_flag;
SERVICE_TYPE_BIT_STRUCTURE type_of_service;
USHORT sequence_id;
BYTE time_to_live;
BYTE protocol;
BYTE option_length;
UNION_USER_OPTIONS user_options;
void *vptr_cached_route; /* address of cached route stored in user's space */
USHORT virtual_port_number; /* do not route, send out through this port if not NO_SUCH_PORT */
ULONG gateway;
} _pack IP_UPPER_LAYER_PARAMETERS;
typedef _struct VERSION_LENGTH_BIT_STRUCTURE
{
#if (_BYTE_ORDER == _LITTLE_ENDIAN )
unsigned char header_length:4;
unsigned char version:4;
#else /* _BYTE_ORDER == _BIG_ENDIAN */
unsigned char version:4;
unsigned char header_length:4;
#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
} _pack VERSION_LENGTH_BIT_STRUCTURE;
typedef _struct FLAG_FRAGMENT_OFFSET_BIT_STRUCTURE
{
#if (_BYTE_ORDER == _LITTLE_ENDIAN )
unsigned char fragment_offset_most_significant_part:5;
unsigned char more_fragment_flag:1;
unsigned char do_not_fragment_flag:1;
unsigned char unused_bit:1;
#else /* _BYTE_ORDER == _BIG_ENDIAN */
unsigned char unused_bit:1;
unsigned char do_not_fragment_flag:1;
unsigned char more_fragment_flag:1;
unsigned char fragment_offset_most_significant_part:5;
#endif /* _BYTE_ORDER == _LITTLE_ENDIAN */
} _pack FLAG_FRAGMENT_OFFSET_BIT_STRUCTURE;
typedef _struct IP_HEADER
{
VERSION_LENGTH_BIT_STRUCTURE version_header_length;
SERVICE_TYPE_BIT_STRUCTURE service_type;
USHORT total_length;
USHORT identifier;
FLAG_FRAGMENT_OFFSET_BIT_STRUCTURE flags_fragment_offset;
BYTE fragment_offset_least_significant_part;
BYTE time_to_live;
BYTE protocol;
USHORT header_checksum;
ULONG source_ip_address;
ULONG destination_ip_address;
} _pack IP_HEADER;
typedef struct IP_PARAMETERS
{
USHORT header_length;
USHORT total_length;
ULONG source_address;
ULONG destination_address;
USHORT offset;
SERVICE_TYPE_BIT_STRUCTURE type_of_service;
USHORT id;
BYTE time_to_live;
BYTE_ENUM (IP_PROTOCOL_VALUE) protocol;
BYTE options_length;
BYTE_ENUM (BOOLEAN) do_not_fragment_flag;
BYTE_ENUM (BOOLEAN) more_fragment_flag;
BYTE version;
USHORT checksum;
USHORT rx_port_number;
ULONG gateway;
BYTE_ENUM (BOOLEAN) union_ip_packet_is_to_be_freed;
BYTE_ENUM (BOOLEAN) packet_forwarded_by_upper_layer;
BYTE_ENUM (BOOLEAN) packet_recognized_by_upper_layer;
} IP_PARAMETERS;
typedef _union UNION_OPTIONS_OR_DATA
{
BYTE data;
BYTE ip_options;
} _pack UNION_OPTIONS_OR_DATA;
typedef struct PSEUDO_IP_PARAMETERS
{
ULONG source_address;
ULONG destination_address;
BYTE zero_field;
BYTE protocol;
USHORT length;
} PSEUDO_IP_PARAMETERS;
#ifndef INVALID_SOCKET_DESCRIPTOR
#define INVALID_SOCKET_DESCRIPTOR 0
#endif
#ifndef SOCKET_OPEN_MODE_WAIT_FOR_MULTIPLE_CONNECTION
#define SOCKET_OPEN_MODE_WAIT_FOR_MULTIPLE_CONNECTION 0xFFFF
#endif
#ifndef WOULD_BLOCK_ERROR
#define WOULD_BLOCK_ERROR 0xFFFF
#endif
#endif /* __OSPF_IP_STRUCTURES_H__ */