1/*  *********************************************************************
2    *  Broadcom Common Firmware Environment (CFE)
3    *
4    *  Internal IP structures			File: net_ip_internal.h
5    *
6    *  This module contains non-public IP stack constants,
7    *  structures, and function prototypes.
8    *
9    *  Author:  Mitch Lichtenberg (mpl@broadcom.com)
10    *
11    *********************************************************************
12    *
13    *  Copyright 2000,2001,2002,2003
14    *  Broadcom Corporation. All rights reserved.
15    *
16    *  This software is furnished under license and may be used and
17    *  copied only in accordance with the following terms and
18    *  conditions.  Subject to these conditions, you may download,
19    *  copy, install, use, modify and distribute modified or unmodified
20    *  copies of this software in source and/or binary form.  No title
21    *  or ownership is transferred hereby.
22    *
23    *  1) Any source code used, modified or distributed must reproduce
24    *     and retain this copyright notice and list of conditions
25    *     as they appear in the source file.
26    *
27    *  2) No right is granted to use any trade name, trademark, or
28    *     logo of Broadcom Corporation.  The "Broadcom Corporation"
29    *     name may not be used to endorse or promote products derived
30    *     from this software without the prior written permission of
31    *     Broadcom Corporation.
32    *
33    *  3) THIS SOFTWARE IS PROVIDED "AS-IS" AND ANY EXPRESS OR
34    *     IMPLIED WARRANTIES, INCLUDING BUT NOT LIMITED TO, ANY IMPLIED
35    *     WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR
36    *     PURPOSE, OR NON-INFRINGEMENT ARE DISCLAIMED. IN NO EVENT
37    *     SHALL BROADCOM BE LIABLE FOR ANY DAMAGES WHATSOEVER, AND IN
38    *     PARTICULAR, BROADCOM SHALL NOT BE LIABLE FOR DIRECT, INDIRECT,
39    *     INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES
40    *     (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE
41    *     GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR
42    *     BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
43    *     OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR
44    *     TORT (INCLUDING NEGLIGENCE OR OTHERWISE), EVEN IF ADVISED OF
45    *     THE POSSIBILITY OF SUCH DAMAGE.
46    ********************************************************************* */
47
48
49/*  *********************************************************************
50    *  ARP Protocol
51    ********************************************************************* */
52
53#define ARP_OPCODE_REQUEST	1
54#define ARP_OPCODE_REPLY	2
55
56#define ARP_HWADDRSPACE_ETHERNET 1
57
58#define PROTOSPACE_IP        0x0800
59#define PROTOSPACE_ARP	     0x0806
60
61#define ARP_KEEP_TIMER          60
62#define ARP_QUERY_TIMER		1
63#define ARP_QUERY_RETRIES	4
64#define ARP_TXWAIT_MAX		2
65#define ARP_TABLE_SIZE		8
66
67typedef enum { ae_unused, ae_arping, ae_established } arpstate_t;
68
69typedef struct arpentry_s {
70    arpstate_t ae_state;
71    int ae_usage;
72    int ae_timer;
73    int ae_retries;
74    int ae_permanent;
75    uint8_t ae_ipaddr[IP_ADDR_LEN];
76    uint8_t ae_ethaddr[ENET_ADDR_LEN];
77    queue_t ae_txqueue;
78} arpentry_t;
79
80
81/*  *********************************************************************
82    *  IP Protocol
83    ********************************************************************* */
84
85#define IPHDR_VER_4	0x40
86#define IPHDR_LEN_20	0x05
87#define IPHDR_LENGTH	20
88#define IPHDR_TOS_DEFAULT 0x00
89#define IPHDR_TTL_DEFAULT 100
90
91#define IPHDR_RESERVED 0x8000
92#define IPHDR_DONTFRAGMENT 0x4000
93#define IPHDR_MOREFRAGMENTS 0x2000
94#define IPHDR_FRAGOFFSET 0x01FFF
95
96typedef struct ip_protodisp_s {
97    uint8_t protocol;
98    int (*cb)(void *ref,ebuf_t *buf,uint8_t *dst,uint8_t *src);
99    void *ref;
100} ip_protodisp_t;
101
102#define IP_MAX_PROTOCOLS	4
103
104
105struct ip_info_s {
106    net_info_t net_info;
107
108    /* Ethernet info */
109    ether_info_t *eth_info;
110
111    /* Info specific to IP */
112    uint16_t ip_id;
113    int ip_port;
114
115    /* IP protocol dispatch table */
116    ip_protodisp_t ip_protocols[IP_MAX_PROTOCOLS];
117
118    /* Info specific to ARP */
119    arpentry_t *arp_table;
120    int arp_port;
121    uint8_t arp_hwaddr[ENET_ADDR_LEN];
122};
123
124
125