Files
m241Neelima/components/ip_net2-6.9/iplite2/src/iplite_netif.h
T
2026-07-30 11:19:44 +05:30

345 lines
13 KiB
C

/*
******************************************************************************
* HEADER FILE
*
* Document no: @(#) $Name: VXWORKS_ITER40_2019102207 $ $RCSfile: iplite_netif.h,v $ $Revision: 1.14.26.1 $
* $Source: /home/interpeak/CVSRoot/iplite2/src/iplite_netif.h,v $
* $Author: svc-cmnet $ $Date: 2013-03-13 07:45:29 $
* $State: Exp $ $Locker: $
*
* INTERPEAK_COPYRIGHT_STRING
* Design and implementation by Kenneth Jonsson <kenneth@interpeak.se>
******************************************************************************
*/
#ifndef IPLITE_NETIF_H
#define IPLITE_NETIF_H
/*
****************************************************************************
* 1 DESCRIPTION
****************************************************************************
*/
/* Types and function for network interface support in IPLITE */
/*
****************************************************************************
* 2 CONFIGURATION
****************************************************************************
*/
#include "iplite_config.h"
/*
****************************************************************************
* 3 INCLUDE FILES
****************************************************************************
*/
#include <ipcom_netif.h>
#include <ipcom_os.h>
#ifdef IPLITE_USE_RFC3927
#include "iplite_timeout.h"
#endif
#ifdef IPCOM_USE_INET6
#include "iplite_ip6.h"
#endif
#ifdef __cplusplus
extern "C" {
#endif
/*
****************************************************************************
* 4 DEFINES
****************************************************************************
*/
#define IPLITE_IF_UNSPECIFIED_INDEX 0
#define IPLITE_IF_UNSPECIFIED_NAME IP_NULL
#define IPLITE_IF_END ((IP_CONST char *) -1)
/*
****************************************************************************
* 5 TYPES
****************************************************************************
*/
/* Forward declaration */
struct Iplite_netif_struct;
struct Iplite_netif_eth_struct;
struct Iplite_ip6_nc_entry_struct;
struct Iplite_ipsec_tdb_struct;
struct Iplite_ip4_data_struct;
struct Iplite_route_entry_struct;
struct Iplite_ip6_dr_entry_struct;
struct Iplite_netif_wlan_struct;
/*
*===========================================================================
* Iplite_link_tick
*===========================================================================
* Description: Performes tasks that must be timer triggered.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* Returns:
*
*/
typedef void (*Iplite_link_tick)(struct Iplite_netif_struct *netif);
/*
*===========================================================================
* Iplite_link_input
*===========================================================================
* Description: Process the link header and dispatch IPv4 packets to
* iplite_ip4_input() and IPv6 packets to iplite_ip6_input().
* The pkt->start must be changed to be the offset to the
* IPv4 or IPv6 header for IPv4 and IPv6 packets.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* pkt - The received packet. pkt->start is the offset to the
* link header.
* Returns:
*
*/
typedef void (*Iplite_link_input)(struct Iplite_netif_struct *netif, Ipcom_pkt *pkt);
/*
*===========================================================================
* Iplite_link_ip4_output
*===========================================================================
* Description: Adds the link header to a IPv4 packet and calls the
* Iplite_drv_output function for the interface.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* rt - The route to the next hop. Link specific data can be
* stored at rt->data. The 'data' buffer is
* IPLITE_ROUTE_ENTRY_DATA_LEN octets long.
* pkt - The packet to send. pkt->start is the offset to the
* IP header. pkt->start must be updated to be the offset to
* the link layer before calling netif->drv_output().
* Returns: 0 = success, <0 = error code (-IPLITE_ERRNO_xxx)
*
*/
typedef int (*Iplite_link_ip4_output)(struct Iplite_netif_struct *netif, struct Ip_in_addr *next_hop, Ipcom_pkt *pkt);
/*
*===========================================================================
* Iplite_link_ip6_output
*===========================================================================
* Description: Adds the link header to a IPv6 packet and calls the
* Iplite_drv_output function for the interface.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* nc - The neighbor entry for the first hop (contains IPv6 to link
* addr information).
* pkt - The packet to send. pkt->start is the offset to the
* IP header. pkt->start must be updated to be the offset to
* the link layer before calling netif->drv_output().
* Returns: 0 = success, <0 = error code (-IPLITE_ERRNO_xxx)
*
*/
typedef int (*Iplite_link_ip6_output)(struct Iplite_netif_struct *netif,
struct Iplite_ip6_nc_entry_struct *nc, Ipcom_pkt *pkt);
/*
*===========================================================================
* Iplite_link_ip6_create_addr
*===========================================================================
* Description: Creates a
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* prefix - The prefix to use (the topmost
* 128 - netif->inet6_if_id_bits is used).
* in6_addr - Will contain the auto address if the call is
* successful.
* Returns:
*
*/
#ifdef IPCOM_USE_INET6
typedef void (*Iplite_link_ip6_create_addr)(struct Iplite_netif_struct *netif,
IP_CONST struct Ip_in6_addr* prefix, struct Ip_in6_addr* in6_addr);
#endif
/*
*===========================================================================
* Iplite_link_ioctl
*===========================================================================
* Description: IO control function for the link layer.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* command - IPLITE_IP4_SIOCxxx or IPLITE_IP6_SIOCxxx style command.
* data - Depends on command.
* Returns: 0 = success, <0 = error code (-IPLITE_ERRNO_xxx)
*
*/
typedef int (*Iplite_link_ioctl)(struct Iplite_netif_struct *netif,
Ip_u32 command, void *data);
/*
*===========================================================================
* Iplite_link_raw_output
*===========================================================================
* Description: Adds a link layer header and outputs the frame to the driver
* ARP (or similar) is bypassed.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* to - The link layer address of the recipient of this frame.
* pkt - The packet which should have a link layer header appended.
* Returns: 0 = success, <0 = error code (-IPLITE_ERRNO_xxx)
*
*/
#ifdef IPCOM_USE_PACKET
typedef int (*Iplite_link_raw_output)(struct Iplite_netif_struct *netif,
IP_CONST struct Ip_sockaddr_ll *to, Ipcom_pkt *pkt);
/*
*===========================================================================
* Iplite_link_get_frame_info
*===========================================================================
* Description: Gets header information from the frame header.
* Parameters: netif - A pointer to the network interface structure for this
* driver.
* frame - A complete link layer frame. pkt->start is the offset
* to the link layer header.
* pkt_type - Will be set to one of the IP_PACKET_xxx type,
* can be IP_NULL if this value is not needed.
* frame_type - Will be set to the frame type (i.e. one of the
* IPLITE_ETH_P_xxx constants for Ethernet). can be IP_NULL if
* this information is not needed.
* src - Points to a buffer to where the source link address
* will be copied. Can be IP_NULL if not needed.
* dst - Points to a buffer to where the destination link address
* will be copied. Can be IP_NULL if not needed.
* Returns: 0 = success, <0 = error code (-IPLITE_ERRNO_xxx)
*
*/
typedef int (*Iplite_link_get_frame_info)(struct Iplite_netif_struct *netif,
Ipcom_pkt *frame, Ip_u8 *pkt_type, Ip_u16 *frame_type,
Ip_u8 *src, Ip_u8 *dst);
#endif /* IPCOM_USE_PACKET */
/*
*===========================================================================
* Iplite_netif
*===========================================================================
*/
typedef struct Iplite_netif_struct
{
Ipcom_netif ipcom; /* IPCOM Ipcom_netif structure.
See IPCOM/include/ipcom_netif.h */
int ref_count; /* Reference count used with ipcom_if_detach() */
/* Additional interface data. */
struct Iplite_netif_eth_struct *eth; /* Pointer to Ethernet info. IP_NULL if not Eth if */
#ifdef IPCOM_USE_INET
struct Iplite_ip4_addr_entry_struct *inet4_addr_list; /* List of IPv4 addresses */
#ifdef IPPPP
Ip_u32 inet4_peeraddr_n;
#endif
#ifdef IPLITE_USE_RFC3927
Ip_u8 inet4_lladdr_state; /* IPLITE_IP4_LLADDR_STATE_xxx */
Ip_u8 inet4_lladdr_num; /* Number of probes or announcement left */
Ip_u8 inet4_lladdr_conflics; /* Number of address conflicts seen */
struct Ip_in_addr inet4_lladdr; /* The current link local address */
Iplite_timeout *inet4_lladdr_tmo; /* Timeout structure for link-local IPv4 address */
#endif
#endif /* IPCOM_USE_INET */
#ifdef IPCOM_USE_INET6
Ip_u16 inet6_if_id_bits; /* Number of bits that should be used for host id
when creating a IPv6 from the link address */
Ip_u16 inet6_pad;
struct Iplite_ip6_addr_entry_struct *inet6_addr_list; /* All addresses on this interface */
struct Iplite_ip6_dr_entry_struct dr; /* Support only single Default router */
struct Iplite_ip6_nc_entry_struct *nc_list;
#ifdef IPPPP
struct Ip_in6_addr inet6_peeraddr;
#endif
#endif /* IPCOM_USE_INET6 */
/***** IPLITE to link layer functions (downcall) *****/
Iplite_link_tick link_tick; /* Can be IP_NULL if no tick is needed */
Iplite_link_input link_input; /* Parse packet in link layer. */
Iplite_link_ioctl link_ioctl;
#ifdef IPCOM_USE_INET
Iplite_link_ip4_output link_ip4_output;
#endif
#ifdef IPCOM_USE_INET6
Iplite_link_ip6_output link_ip6_output;
Iplite_link_ip6_create_addr link_ip6_create_addr;
#endif /* IPCOM_USE_INET6 */
/* IPLITE to link layer packet functions. */
#ifdef IPCOM_USE_PACKET
Iplite_link_raw_output link_raw_output;
Iplite_link_get_frame_info link_get_frame_info;
#endif
/***** Interface output queue *****/
Ipcom_sem snd_sem;
Ipcom_pkt *snd_head;
Ipcom_pkt *snd_tail;
int snd_num;
int snd_max;
int snd_id;
#ifdef IPLITE_USE_WLAN
struct Iplite_netif_wlan_struct *wlan;
#endif
}
Iplite_netif;
/*
****************************************************************************
* 6 FUNCTIONS
****************************************************************************
*/
/*
*===========================================================================
* internal funcs
*===========================================================================
*/
IP_GLOBAL void iplite_if_clean(Iplite_netif *netif, Ip_bool clean_ip4, Ip_bool clean_ip6);
IP_GLOBAL int iplite_if_output(Iplite_netif *netif, Ipcom_pkt *pkt);
IP_GLOBAL int iplite_if_drv_output(Iplite_netif *netif, Ipcom_pkt *pkt);
IP_GLOBAL int iplite_if_configure(void);
IP_GLOBAL void iplite_if_lock(Iplite_netif *netif);
IP_GLOBAL int iplite_if_unlock(Iplite_netif *netif);
IP_GLOBAL int iplite_if_drv_ioctl(Iplite_netif *netif, Ip_u32 command, void *data);
IP_GLOBAL Iplite_netif *iplite_if_indextonetif(Ip_u32 ifindex);
IP_GLOBAL Iplite_netif *iplite_if_nametonetif(IP_CONST char *ifname);
#ifdef IPPPP
IP_PUBLIC int iplite_ppp_if_init(Iplite_netif *netif);
#endif
#ifdef __cplusplus
}
#endif
#endif
/*
****************************************************************************
* END OF FILE
****************************************************************************
*/