Changeset 331 for EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_var.h
- Timestamp:
- Jan 21, 2018, 12:10:09 AM (6 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
EcnlProtoTool/trunk/asp3_dcre/tinet/netinet/ip_var.h
r321 r331 2 2 * TINET (TCP/IP Protocol Stack) 3 3 * 4 * Copyright (C) 2001-20 09by Dep. of Computer Science and Engineering4 * Copyright (C) 2001-2017 by Dep. of Computer Science and Engineering 5 5 * Tomakomai National College of Technology, JAPAN 6 6 * … … 71 71 #define _IP_VAR_H_ 72 72 73 /* 74 * IPv4 ヘッダ・ペイロードアクセスマクロ 75 */ 76 77 #define IF_IP4_HDR_SIZE (IF_HDR_SIZE + IP4_HDR_SIZE) 78 79 #define GET_IP4_HDR(nbuf) ((T_IP4_HDR*)((nbuf)->buf + IF_HDR_SIZE)) 80 #define GET_IP4_SDU(nbuf) ((uint8_t*)((nbuf)->buf) + GET_IF_IP4_HDR_SIZE(nbuf)) 81 82 #define GET_IP4_HDR_SIZE(iph) ((uint8_t)IP4_VHL_HL((iph)->vhl) << 2) 83 #define GET_IP4_SDU_SIZE(iph) (ntohs((iph)->len) - GET_IP4_HDR_SIZE(iph)) 84 #define GET_IF_IP4_HDR_SIZE(nbuf) (IF_HDR_SIZE + (GET_IP4_HDR_SIZE(GET_IP4_HDR(nbuf)))) 85 86 #define SET_IP4_SDU_SIZE(iph,slen) ((iph)->len=(uint16_t)htons((slen) + IP4_HDR_SIZE)) 73 #include <netinet/ip4_var.h> 74 #include <netinet6/ip6_var.h> 87 75 88 76 /* … … 90 78 */ 91 79 92 # if defined(SUPPORT_INET4)80 #define GET_IP_VER(nbuf) (*(uint8_t*)((nbuf)->buf+IF_HDR_SIZE)>>4) 93 81 94 # define T_TCP_IP_Q_HDR T_TCP_IP4_Q_HDR82 #if defined(_IP6_CFG) 95 83 96 #define IF_IP_HDR_SIZE IF_IP4_HDR_SIZE 84 #if defined(_IP4_CFG) 85 86 #define IF_IP_HDR_SIZE(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?IF_IP6_HDR_SIZE:IF_IP4_HDR_SIZE) 87 #define IF_IP_NET_HDR_SIZE(addr) (IN6_IS_ADDR_V4MAPPED(addr)?IF_IP4_HDR_SIZE:IF_IP6_HDR_SIZE) 88 89 #define IP_OUTPUT(nbuf,tmout) (GET_IP_VER(nbuf)==IPV6_VERSION?ip6_output(nbuf,0,tmout):ip_output(nbuf,tmout)) 90 #define IP_REMOVE_OPTIONS(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?ip6_remove_exthdrs(nbuf):ip_remove_options(nbuf)) 91 92 #define GET_IP_HDR(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?GET_IP6_HDR(nbuf):GET_IP4_HDR(nbuf)) 93 #define GET_IP_HDR_SIZE(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?GET_IP6_HDR_SIZE(nbuf):GET_IP4_HDR_SIZE(nbuf)) 94 #define GET_IP_SDU_SIZE(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?GET_IP6_SDU_SIZE(nbuf):GET_IP4_SDU_SIZE(nbuf)) 95 #define GET_IF_IP_HDR_SIZE(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?GET_IF_IP6_HDR_SIZE(nbuf):GET_IF_IP4_HDR_SIZE(nbuf)) 96 #define GET_IP_TCP_Q_HDR_OFFSET(nbuf) (GET_IP_VER(nbuf)==IPV6_VERSION?\ 97 ((T_IP6_TCP_Q_HDR*)GET_IP6_HDR(nbuf))->thoff:((T_IP4_TCP_Q_HDR*)GET_IP4_HDR(nbuf))->thoff) 98 99 #define SET_IP_CF(nbuf,cf) (GET_IP_VER(nbuf)==IPV6_VERSION?SET_IP6_CF(nbuf,cf):(0)) 100 #define SET_IP_SDU_SIZE(nbuf,len) (GET_IP_VER(nbuf)==IPV6_VERSION?SET_IP6_SDU_SIZE(nbuf,len):SET_IP4_SDU_SIZE(nbuf,len)) 101 #define SET_IP_TCP_Q_HDR_OFFSET(nbuf,thoff) \ 102 (GET_IP_VER(nbuf)==IPV6_VERSION\ 103 ?(((T_IP6_TCP_Q_HDR*)GET_IP6_HDR(nbuf))->thoff=thoff)\ 104 :(((T_IP4_TCP_Q_HDR*)GET_IP4_HDR(nbuf))->thoff=thoff)) 105 106 #else /* of #if defined(_IP4_CFG) */ 107 108 #define IF_IP_HDR_SIZE(nbuf) IF_IP6_HDR_SIZE 109 #define IF_IP_NET_HDR_SIZE(addr) IF_IP6_HDR_SIZE 110 111 #define IP_OUTPUT(nbuf,tmout) ip6_output(nbuf,0,tmout) 112 #define IP_REMOVE_OPTIONS(nbuf) ip6_remove_exthdrs(nbuf) 113 114 #define GET_IP_HDR(nbuf) GET_IP6_HDR(nbuf) 115 #define GET_IP_HDR_SIZE(nbuf) GET_IP6_HDR_SIZE(nbuf) 116 #define GET_IP_SDU_SIZE(nbuf) GET_IP6_SDU_SIZE(nbuf) 117 #define GET_IF_IP_HDR_SIZE(nbuf) GET_IF_IP6_HDR_SIZE(nbuf) 118 #define GET_IP_TCP_Q_HDR_OFFSET(nbuf) (((T_IP6_TCP_Q_HDR*)GET_IP6_HDR(nbuf))->thoff) 119 120 #define SET_IP_CF(nbuf,cf) SET_IP6_CF(nbuf,cf) 121 #define SET_IP_SDU_SIZE(nbuf,len) SET_IP6_SDU_SIZE(nbuf,len) 122 #define SET_IP_TCP_Q_HDR_OFFSET(nbuf,thoff) \ 123 (((T_IP6_TCP_Q_HDR*)GET_IP6_HDR(nbuf))->thoff=thoff) 124 125 #endif /* of #if defined(_IP4_CFG) */ 126 127 #else /* of #if defined(_IP6_CFG) */ 128 129 #if defined(_IP4_CFG) 130 131 #define IF_IP_HDR_SIZE(nbuf) IF_IP4_HDR_SIZE 132 #define IF_IP_NET_HDR_SIZE(addr) IF_IP4_HDR_SIZE 133 134 #define IP_OUTPUT(nbuf,tmout) ip_output(nbuf,tmout) 135 #define IP_REMOVE_OPTIONS(nbuf) ip_remove_options(nbuf) 97 136 98 137 #define GET_IP_HDR(nbuf) GET_IP4_HDR(nbuf) 99 #define GET_IP_SDU(nbuf) GET_IP4_SDU(nbuf) 138 #define GET_IP_HDR_SIZE(nbuf) GET_IP4_HDR_SIZE(nbuf) 139 #define GET_IP_SDU_SIZE(nbuf) GET_IP4_SDU_SIZE(nbuf) 140 #define GET_IF_IP_HDR_SIZE(nbuf) GET_IF_IP4_HDR_SIZE(nbuf) 141 #define GET_IP_TCP_Q_HDR_OFFSET(nbuf) (((T_IP4_TCP_Q_HDR*)GET_IP4_HDR(nbuf))->thoff) 100 142 101 #define GET_IP_HDR_SIZE(iph) GET_IP4_HDR_SIZE(iph)102 #define GET_IP_SDU_SIZE(iph) GET_IP4_SDU_SIZE(iph)103 #define GET_IF_IP_HDR_SIZE(nbuf) GET_IF_IP4_HDR_SIZE(nbuf)143 #define SET_IP_SDU_SIZE(nbuf,len) SET_IP4_SDU_SIZE(nbuf,len) 144 #define SET_IP_TCP_Q_HDR_OFFSET(nbuf,thoff) \ 145 (((T_IP4_TCP_Q_HDR*)GET_IP4_HDR(nbuf))->thoff=thoff) 104 146 105 # define SET_IP_SDU_SIZE(iph,len) SET_IP4_SDU_SIZE(iph,len)147 #else /* of #if defined(_IP4_CFG) */ 106 148 107 #define IP_OUTPUT(nbuf,tmout) ip_output(nbuf,tmout) 108 #define IP_INIT() ip_init() 109 #define IP_REMOVE_OPTIONS(nbuf) ip_remove_options(nbuf) 149 #error "not implemented." 110 150 111 #endif /* of #if defined( SUPPORT_INET4) */151 #endif /* of #if defined(_IP4_CFG) */ 112 152 113 /* 114 * IP の MSS サイズのネットワークバッファ 115 */ 116 117 typedef struct t_net_buf_ip_mss { 118 uint16_t len; /* データの長さ */ 119 uint8_t idix; /* mpfid のインデックス */ 120 uint8_t flags; /* フラグ */ 121 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 122 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; 123 #endif 124 #if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4 125 uint8_t halign[4 - IF_HDR_ALIGN]; 126 #endif 127 uint8_t buf[IF_HDR_SIZE + IP4_MSS]; 128 /* バッファ本体 */ 129 } T_NET_BUF_IP_MSS; 130 131 /* 132 * 65536 オクテットサイズのネットワークバッファ 133 */ 134 135 typedef struct t_net_buf4_65536 { 136 uint16_t len; /* データの長さ */ 137 uint8_t idix; /* mpfid のインデックス */ 138 uint8_t flags; /* フラグ */ 139 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 140 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; 141 #endif 142 #if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4 143 uint8_t halign[4 - IF_HDR_ALIGN]; 144 #endif 145 uint8_t buf[IF_IP4_HDR_SIZE + 65536]; 146 /* バッファ本体 */ 147 #if defined(IF_PDU_HDR_PADDING) 148 uint8_t padding[IF_PDU_HDR_PADDING]; 149 #endif /* ヘッダの余分 */ 150 } T_NET_BUF4_65536; 151 152 #ifdef IP4_CFG_FRAGMENT 153 154 /* 155 * 再構成キュー用 IPv4 ヘッダの定義 156 */ 157 158 typedef struct t_qip4_hdr { 159 uint8_t vhl; /* version << 4 | header length >> 2 */ 160 /* length は 4 octets 単位 */ 161 uint8_t type; /* type of services */ 162 uint16_t len; /* total length */ 163 164 uint16_t id; /* identification */ 165 uint16_t flg_off; /* fragment flag & offset */ 166 167 uint8_t ttl; /* time to live */ 168 uint8_t proto; /* protocol */ 169 uint16_t sum; /* checksum */ 170 171 uint32_t src; /* source address */ 172 173 T_NET_BUF *next; /* 次の IPv4 フラグメント */ 174 } __attribute__((packed, aligned(2)))T_QIP4_HDR; 175 176 #define QIP4_HDR_SIZE (sizeof(T_QIP4_HDR)) 177 #define IF_QIP4_HDR_SIZE (IF_HDR_SIZE + QIP4_HDR_SIZE) 178 179 #define GET_QIP4_HDR(nbuf) ((T_QIP4_HDR*)((nbuf)->buf + IF_HDR_SIZE)) 180 #define GET_QIP4_SDU(nbuf) ((uint8_t*)(nbuf)->buf + GET_IF_QIP4_HDR_SIZE(nbuf)) 181 182 #define GET_QIP4_HDR_SIZE(iph) ((uint8_t)IP4_VHL_HL((iph)->vhl) << 2) 183 #define GET_IF_QIP4_HDR_SIZE(nbuf) (IF_HDR_SIZE + (GET_QIP4_HDR_SIZE(GET_QIP4_HDR(nbuf)))) 184 185 /* 186 * データグラム再構成用ネットワークバッファ 187 */ 188 189 typedef struct t_net_buf4_reassm { 190 uint16_t len; /* データの長さ */ 191 uint8_t idix; /* mpfid のインデックス */ 192 uint8_t flags; /* フラグ */ 193 #ifdef IF_ETHER_NIC_NET_BUF_ALIGN 194 uint8_t nalign[IF_ETHER_NIC_NET_BUF_ALIGN]; 195 #endif 196 #if CPU_NET_ALIGN == 4 && IF_HDR_ALIGN != 4 197 uint8_t align[4 - IF_HDR_ALIGN]; 198 #endif 199 uint8_t buf[IP4_CFG_FRAG_REASSM_SIZE]; 200 /* バッファ本体 */ 201 } T_NET_BUF4_REASSM; 202 203 #endif /* of #ifdef IP4_CFG_FRAGMENT */ 204 205 /* 206 * TCP の再構成キューにおける IPv4 ヘッダの定義 207 */ 208 209 typedef struct t_tcp_ip4_q_hdr { 210 uint8_t vhl; /* version << 4 | header length >> 2 */ 211 /* length は 4 octets 単位 */ 212 uint8_t type; /* type of services */ 213 uint16_t len; /* total length */ 214 215 uint16_t id; /* identification */ 216 uint16_t flg_off; /* fragment flag & offset */ 217 218 uint8_t ttl; /* time to live */ 219 uint8_t proto; /* protocol */ 220 uint16_t thoff; /* TCP ヘッダのオフセット */ 221 222 T_IN4_ADDR src; /* source address */ 223 T_IN4_ADDR dst; /* destination address */ 224 } __attribute__((packed, aligned(2)))T_TCP_IP4_Q_HDR; 225 226 #ifdef SUPPORT_MIB 227 228 /* 229 * SNMP の 管理情報ベース (MIB) 230 */ 231 232 typedef struct t_ip_stats { 233 uint32_t ipInReceives; 234 uint32_t ipInHdrErrors; 235 uint32_t ipInAddrErrors; 236 /* uint32_t ipForwDatagrams;*/ 237 uint32_t ipInUnknownProtos; 238 /* uint32_t ipInDiscards;*/ 239 uint32_t ipInDelivers; 240 uint32_t ipOutRequests; 241 uint32_t ipOutDiscards; 242 /* uint32_t ipOutNoRoutes;*/ 243 244 #ifdef IP4_CFG_FRAGMENT 245 246 uint32_t ipReasmReqds; 247 uint32_t ipReasmOKs; 248 uint32_t ipReasmFails; 249 uint32_t ipFragOKs; 250 uint32_t ipFragFails; 251 uint32_t ipFragCreates; 252 253 #else /* of #ifdef IP4_CFG_FRAGMENT */ 254 255 uint32_t ipReasmReqds; 256 /* uint32_t ipReasmOKs;*/ 257 uint32_t ipReasmFails; 258 /* uint32_t ipFragOKs;*/ 259 /* uint32_t ipFragFails;*/ 260 /* uint32_t ipFragCreates;*/ 261 262 #endif /* of #ifdef IP4_CFG_FRAGMENT */ 263 264 } T_IP_STATS; 265 266 extern T_IP_STATS ip_stats; 267 268 #endif /* of #ifdef SUPPORT_MIB */ 269 270 /* 271 * 関数 272 */ 273 274 extern void ip_frag_timer (void); 275 extern void ip_init (void); 276 extern ER ip_remove_options (T_NET_BUF *nbuf); 277 extern ER ip_output (T_NET_BUF *nbuf, TMO tmout); 153 #endif /* of #if defined(_IP6_CFG) */ 278 154 279 155 #endif /* of #ifndef _IP_VAR_H_ */
Note:
See TracChangeset
for help on using the changeset viewer.