/pkgnet/tags/20220214/watt32/inc/netinet/icmp6.h |
---|
0,0 → 1,739 |
/*!\file netinet/icmp6.h |
* ICMP for IPv6. |
*/ |
/* $FreeBSD: src/sys/netinet/icmp6.h,v 1.8 2002/05/06 16:28:25 ume Exp $ */ |
/* $KAME: icmp6.h,v 1.46 2001/04/27 15:09:48 itojun Exp $ */ |
/* |
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. Neither the name of the project nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93 |
*/ |
#ifndef _NETINET_ICMP6_H_ |
#define _NETINET_ICMP6_H_ |
#ifndef __SYS_WTYPES_H |
#include <sys/wtypes.h> |
#endif |
#define ICMPV6_PLD_MAXLEN 1232 /* IPV6_MMTU - sizeof(struct ip6_hdr) |
- sizeof(struct icmp6_hdr) */ |
#include <sys/packon.h> |
struct icmp6_hdr { |
u_int8_t icmp6_type; /* type field */ |
u_int8_t icmp6_code; /* code field */ |
u_int16_t icmp6_cksum; /* checksum field */ |
union { |
u_int32_t icmp6_un_data32[1]; /* type-specific field */ |
u_int16_t icmp6_un_data16[2]; /* type-specific field */ |
u_int8_t icmp6_un_data8[4]; /* type-specific field */ |
} icmp6_dataun; |
}; |
#define icmp6_data32 icmp6_dataun.icmp6_un_data32 |
#define icmp6_data16 icmp6_dataun.icmp6_un_data16 |
#define icmp6_data8 icmp6_dataun.icmp6_un_data8 |
#define icmp6_pptr icmp6_data32[0] /* parameter prob */ |
#define icmp6_mtu icmp6_data32[0] /* packet too big */ |
#define icmp6_id icmp6_data16[0] /* echo request/reply */ |
#define icmp6_seq icmp6_data16[1] /* echo request/reply */ |
#define icmp6_maxdelay icmp6_data16[0] /* mcast group membership */ |
#define ICMP6_DST_UNREACH 1 /* dest unreachable, codes: */ |
#define ICMP6_PACKET_TOO_BIG 2 /* packet too big */ |
#define ICMP6_TIME_EXCEEDED 3 /* time exceeded, code: */ |
#define ICMP6_PARAM_PROB 4 /* ip6 header bad */ |
#define ICMP6_ECHO_REQUEST 128 /* echo service */ |
#define ICMP6_ECHO_REPLY 129 /* echo reply */ |
#define ICMP6_MEMBERSHIP_QUERY 130 /* group membership query */ |
#define MLD_LISTENER_QUERY 130 /* multicast listener query */ |
#define ICMP6_MEMBERSHIP_REPORT 131 /* group membership report */ |
#define MLD_LISTENER_REPORT 131 /* multicast listener report */ |
#define ICMP6_MEMBERSHIP_REDUCTION 132 /* group membership termination */ |
#define MLD_LISTENER_DONE 132 /* multicast listener done */ |
#ifndef _KERNEL |
/* the followings are for backward compatibility to old KAME apps. */ |
#define MLD6_LISTENER_QUERY MLD_LISTENER_QUERY |
#define MLD6_LISTENER_REPORT MLD_LISTENER_REPORT |
#define MLD6_LISTENER_DONE MLD_LISTENER_DONE |
#endif |
#define ND_ROUTER_SOLICIT 133 /* router solicitation */ |
#define ND_ROUTER_ADVERT 134 /* router advertisment */ |
#define ND_NEIGHBOR_SOLICIT 135 /* neighbor solicitation */ |
#define ND_NEIGHBOR_ADVERT 136 /* neighbor advertisment */ |
#define ND_REDIRECT 137 /* redirect */ |
#define ICMP6_ROUTER_RENUMBERING 138 /* router renumbering */ |
#define ICMP6_WRUREQUEST 139 /* who are you request */ |
#define ICMP6_WRUREPLY 140 /* who are you reply */ |
#define ICMP6_FQDN_QUERY 139 /* FQDN query */ |
#define ICMP6_FQDN_REPLY 140 /* FQDN reply */ |
#define ICMP6_NI_QUERY 139 /* node information request */ |
#define ICMP6_NI_REPLY 140 /* node information reply */ |
/* The definitions below are experimental. TBA */ |
#define MLD_MTRACE_RESP 200 /* mtrace resp (to sender) */ |
#define MLD_MTRACE 201 /* mtrace messages */ |
#define ICMP6_HADISCOV_REQUEST 202 /* XXX To be defined */ |
#define ICMP6_HADISCOV_REPLY 203 /* XXX To be defined */ |
#ifndef _KERNEL |
#define MLD6_MTRACE_RESP MLD_MTRACE_RESP |
#define MLD6_MTRACE MLD_MTRACE |
#endif |
#define ICMP6_MAXTYPE 203 |
#define ICMP6_DST_UNREACH_NOROUTE 0 /* no route to destination */ |
#define ICMP6_DST_UNREACH_ADMIN 1 /* administratively prohibited */ |
#define ICMP6_DST_UNREACH_NOTNEIGHBOR 2 /* not a neighbor(obsolete) */ |
#define ICMP6_DST_UNREACH_BEYONDSCOPE 2 /* beyond scope of source address */ |
#define ICMP6_DST_UNREACH_ADDR 3 /* address unreachable */ |
#define ICMP6_DST_UNREACH_NOPORT 4 /* port unreachable */ |
#define ICMP6_TIME_EXCEED_TRANSIT 0 /* ttl==0 in transit */ |
#define ICMP6_TIME_EXCEED_REASSEMBLY 1 /* ttl==0 in reass */ |
#define ICMP6_PARAMPROB_HEADER 0 /* erroneous header field */ |
#define ICMP6_PARAMPROB_NEXTHEADER 1 /* unrecognized next header */ |
#define ICMP6_PARAMPROB_OPTION 2 /* unrecognized option */ |
#define ICMP6_INFOMSG_MASK 0x80 /* all informational messages */ |
#define ICMP6_NI_SUBJ_IPV6 0 /* Query Subject is an IPv6 address */ |
#define ICMP6_NI_SUBJ_FQDN 1 /* Query Subject is a Domain name */ |
#define ICMP6_NI_SUBJ_IPV4 2 /* Query Subject is an IPv4 address */ |
#define ICMP6_NI_SUCCESS 0 /* node information successful reply */ |
#define ICMP6_NI_REFUSED 1 /* node information request is refused */ |
#define ICMP6_NI_UNKNOWN 2 /* unknown Qtype */ |
#define ICMP6_ROUTER_RENUMBERING_COMMAND 0 /* rr command */ |
#define ICMP6_ROUTER_RENUMBERING_RESULT 1 /* rr result */ |
#define ICMP6_ROUTER_RENUMBERING_SEQNUM_RESET 255 /* rr seq num reset */ |
/* Used in kernel only */ |
#define ND_REDIRECT_ONLINK 0 /* redirect to an on-link node */ |
#define ND_REDIRECT_ROUTER 1 /* redirect to a better router */ |
/* |
* Multicast Listener Discovery |
*/ |
struct mld_hdr { |
struct icmp6_hdr mld_icmp6_hdr; |
struct in6_addr mld_addr; /* multicast address */ |
}; |
/* definitions to provide backward compatibility to old KAME applications */ |
#ifndef _KERNEL |
#define mld6_hdr mld_hdr |
#define mld6_type mld_type |
#define mld6_code mld_code |
#define mld6_cksum mld_cksum |
#define mld6_maxdelay mld_maxdelay |
#define mld6_reserved mld_reserved |
#define mld6_addr mld_addr |
#endif |
/* shortcut macro definitions */ |
#define mld_type mld_icmp6_hdr.icmp6_type |
#define mld_code mld_icmp6_hdr.icmp6_code |
#define mld_cksum mld_icmp6_hdr.icmp6_cksum |
#define mld_maxdelay mld_icmp6_hdr.icmp6_data16[0] |
#define mld_reserved mld_icmp6_hdr.icmp6_data16[1] |
/* |
* Neighbor Discovery |
*/ |
struct nd_router_solicit { /* router solicitation */ |
struct icmp6_hdr nd_rs_hdr; |
/* could be followed by options */ |
}; |
#define nd_rs_type nd_rs_hdr.icmp6_type |
#define nd_rs_code nd_rs_hdr.icmp6_code |
#define nd_rs_cksum nd_rs_hdr.icmp6_cksum |
#define nd_rs_reserved nd_rs_hdr.icmp6_data32[0] |
struct nd_router_advert { /* router advertisement */ |
struct icmp6_hdr nd_ra_hdr; |
u_int32_t nd_ra_reachable; /* reachable time */ |
u_int32_t nd_ra_retransmit; /* retransmit timer */ |
/* could be followed by options */ |
}; |
#define nd_ra_type nd_ra_hdr.icmp6_type |
#define nd_ra_code nd_ra_hdr.icmp6_code |
#define nd_ra_cksum nd_ra_hdr.icmp6_cksum |
#define nd_ra_curhoplimit nd_ra_hdr.icmp6_data8[0] |
#define nd_ra_flags_reserved nd_ra_hdr.icmp6_data8[1] |
#define ND_RA_FLAG_MANAGED 0x80 |
#define ND_RA_FLAG_OTHER 0x40 |
#define ND_RA_FLAG_HA 0x20 |
/* |
* Router preference values based on draft-draves-ipngwg-router-selection-01. |
* These are non-standard definitions. |
*/ |
#define ND_RA_FLAG_RTPREF_MASK 0x18 /* 00011000 */ |
#define ND_RA_FLAG_RTPREF_HIGH 0x08 /* 00001000 */ |
#define ND_RA_FLAG_RTPREF_MEDIUM 0x00 /* 00000000 */ |
#define ND_RA_FLAG_RTPREF_LOW 0x18 /* 00011000 */ |
#define ND_RA_FLAG_RTPREF_RSV 0x10 /* 00010000 */ |
#define nd_ra_router_lifetime nd_ra_hdr.icmp6_data16[1] |
struct nd_neighbor_solicit { /* neighbor solicitation */ |
struct icmp6_hdr nd_ns_hdr; |
struct in6_addr nd_ns_target; /*target address */ |
/* could be followed by options */ |
}; |
#define nd_ns_type nd_ns_hdr.icmp6_type |
#define nd_ns_code nd_ns_hdr.icmp6_code |
#define nd_ns_cksum nd_ns_hdr.icmp6_cksum |
#define nd_ns_reserved nd_ns_hdr.icmp6_data32[0] |
struct nd_neighbor_advert { /* neighbor advertisement */ |
struct icmp6_hdr nd_na_hdr; |
struct in6_addr nd_na_target; /* target address */ |
/* could be followed by options */ |
}; |
#define nd_na_type nd_na_hdr.icmp6_type |
#define nd_na_code nd_na_hdr.icmp6_code |
#define nd_na_cksum nd_na_hdr.icmp6_cksum |
#define nd_na_flags_reserved nd_na_hdr.icmp6_data32[0] |
#if BYTE_ORDER == BIG_ENDIAN |
#define ND_NA_FLAG_ROUTER 0x80000000 |
#define ND_NA_FLAG_SOLICITED 0x40000000 |
#define ND_NA_FLAG_OVERRIDE 0x20000000 |
#else |
#if BYTE_ORDER == LITTLE_ENDIAN |
#define ND_NA_FLAG_ROUTER 0x80 |
#define ND_NA_FLAG_SOLICITED 0x40 |
#define ND_NA_FLAG_OVERRIDE 0x20 |
#endif |
#endif |
struct nd_redirect { /* redirect */ |
struct icmp6_hdr nd_rd_hdr; |
struct in6_addr nd_rd_target; /* target address */ |
struct in6_addr nd_rd_dst; /* destination address */ |
/* could be followed by options */ |
}; |
#define nd_rd_type nd_rd_hdr.icmp6_type |
#define nd_rd_code nd_rd_hdr.icmp6_code |
#define nd_rd_cksum nd_rd_hdr.icmp6_cksum |
#define nd_rd_reserved nd_rd_hdr.icmp6_data32[0] |
struct nd_opt_hdr { /* Neighbor discovery option header */ |
u_int8_t nd_opt_type; |
u_int8_t nd_opt_len; |
/* followed by option specific data*/ |
}; |
#define ND_OPT_SOURCE_LINKADDR 1 |
#define ND_OPT_TARGET_LINKADDR 2 |
#define ND_OPT_PREFIX_INFORMATION 3 |
#define ND_OPT_REDIRECTED_HEADER 4 |
#define ND_OPT_MTU 5 |
#define ND_OPT_ROUTE_INFO 200 /* draft-ietf-ipngwg-router-preference, not officially assigned yet */ |
struct nd_opt_prefix_info { /* prefix information */ |
u_int8_t nd_opt_pi_type; |
u_int8_t nd_opt_pi_len; |
u_int8_t nd_opt_pi_prefix_len; |
u_int8_t nd_opt_pi_flags_reserved; |
u_int32_t nd_opt_pi_valid_time; |
u_int32_t nd_opt_pi_preferred_time; |
u_int32_t nd_opt_pi_reserved2; |
struct in6_addr nd_opt_pi_prefix; |
}; |
#define ND_OPT_PI_FLAG_ONLINK 0x80 |
#define ND_OPT_PI_FLAG_AUTO 0x40 |
struct nd_opt_rd_hdr { /* redirected header */ |
u_int8_t nd_opt_rh_type; |
u_int8_t nd_opt_rh_len; |
u_int16_t nd_opt_rh_reserved1; |
u_int32_t nd_opt_rh_reserved2; |
/* followed by IP header and data */ |
}; |
struct nd_opt_mtu { /* MTU option */ |
u_int8_t nd_opt_mtu_type; |
u_int8_t nd_opt_mtu_len; |
u_int16_t nd_opt_mtu_reserved; |
u_int32_t nd_opt_mtu_mtu; |
}; |
struct nd_opt_route_info { /* route info */ |
u_int8_t nd_opt_rti_type; |
u_int8_t nd_opt_rti_len; |
u_int8_t nd_opt_rti_prefixlen; |
u_int8_t nd_opt_rti_flags; |
u_int32_t nd_opt_rti_lifetime; |
/* prefix follows */ |
}; |
/* |
* icmp6 namelookup |
*/ |
struct icmp6_namelookup { |
struct icmp6_hdr icmp6_nl_hdr; |
u_int8_t icmp6_nl_nonce[8]; |
int32_t icmp6_nl_ttl; |
#if 0 |
u_int8_t icmp6_nl_len; |
u_int8_t icmp6_nl_name[3]; |
#endif |
/* could be followed by options */ |
}; |
/* |
* icmp6 node information |
*/ |
struct icmp6_nodeinfo { |
struct icmp6_hdr icmp6_ni_hdr; |
u_int8_t icmp6_ni_nonce[8]; |
/* could be followed by reply data */ |
}; |
#define ni_type icmp6_ni_hdr.icmp6_type |
#define ni_code icmp6_ni_hdr.icmp6_code |
#define ni_cksum icmp6_ni_hdr.icmp6_cksum |
#define ni_qtype icmp6_ni_hdr.icmp6_data16[0] |
#define ni_flags icmp6_ni_hdr.icmp6_data16[1] |
#define NI_QTYPE_NOOP 0 /* NOOP */ |
#define NI_QTYPE_SUPTYPES 1 /* Supported Qtypes */ |
#define NI_QTYPE_FQDN 2 /* FQDN (draft 04) */ |
#define NI_QTYPE_DNSNAME 2 /* DNS Name */ |
#define NI_QTYPE_NODEADDR 3 /* Node Addresses */ |
#define NI_QTYPE_IPV4ADDR 4 /* IPv4 Addresses */ |
#if BYTE_ORDER == BIG_ENDIAN |
#define NI_SUPTYPE_FLAG_COMPRESS 0x1 |
#define NI_FQDN_FLAG_VALIDTTL 0x1 |
#elif BYTE_ORDER == LITTLE_ENDIAN |
#define NI_SUPTYPE_FLAG_COMPRESS 0x0100 |
#define NI_FQDN_FLAG_VALIDTTL 0x0100 |
#endif |
#ifdef NAME_LOOKUPS_04 |
#if BYTE_ORDER == BIG_ENDIAN |
#define NI_NODEADDR_FLAG_LINKLOCAL 0x1 |
#define NI_NODEADDR_FLAG_SITELOCAL 0x2 |
#define NI_NODEADDR_FLAG_GLOBAL 0x4 |
#define NI_NODEADDR_FLAG_ALL 0x8 |
#define NI_NODEADDR_FLAG_TRUNCATE 0x10 |
#define NI_NODEADDR_FLAG_ANYCAST 0x20 /* just experimental. not in spec */ |
#elif BYTE_ORDER == LITTLE_ENDIAN |
#define NI_NODEADDR_FLAG_LINKLOCAL 0x0100 |
#define NI_NODEADDR_FLAG_SITELOCAL 0x0200 |
#define NI_NODEADDR_FLAG_GLOBAL 0x0400 |
#define NI_NODEADDR_FLAG_ALL 0x0800 |
#define NI_NODEADDR_FLAG_TRUNCATE 0x1000 |
#define NI_NODEADDR_FLAG_ANYCAST 0x2000 /* just experimental. not in spec */ |
#endif |
#else /* draft-ietf-ipngwg-icmp-name-lookups-05 (and later?) */ |
#if BYTE_ORDER == BIG_ENDIAN |
#define NI_NODEADDR_FLAG_TRUNCATE 0x1 |
#define NI_NODEADDR_FLAG_ALL 0x2 |
#define NI_NODEADDR_FLAG_COMPAT 0x4 |
#define NI_NODEADDR_FLAG_LINKLOCAL 0x8 |
#define NI_NODEADDR_FLAG_SITELOCAL 0x10 |
#define NI_NODEADDR_FLAG_GLOBAL 0x20 |
#define NI_NODEADDR_FLAG_ANYCAST 0x40 /* just experimental. not in spec */ |
#elif BYTE_ORDER == LITTLE_ENDIAN |
#define NI_NODEADDR_FLAG_TRUNCATE 0x0100 |
#define NI_NODEADDR_FLAG_ALL 0x0200 |
#define NI_NODEADDR_FLAG_COMPAT 0x0400 |
#define NI_NODEADDR_FLAG_LINKLOCAL 0x0800 |
#define NI_NODEADDR_FLAG_SITELOCAL 0x1000 |
#define NI_NODEADDR_FLAG_GLOBAL 0x2000 |
#define NI_NODEADDR_FLAG_ANYCAST 0x4000 /* just experimental. not in spec */ |
#endif |
#endif |
struct ni_reply_fqdn { |
u_int32_t ni_fqdn_ttl; /* TTL */ |
u_int8_t ni_fqdn_namelen; /* length in octets of the FQDN */ |
u_int8_t ni_fqdn_name[3]; /* XXX: alignment */ |
}; |
/* |
* Router Renumbering. as router-renum-08.txt |
*/ |
struct icmp6_router_renum { /* router renumbering header */ |
struct icmp6_hdr rr_hdr; |
u_int8_t rr_segnum; |
u_int8_t rr_flags; |
u_int16_t rr_maxdelay; |
u_int32_t rr_reserved; |
}; |
#define ICMP6_RR_FLAGS_TEST 0x80 |
#define ICMP6_RR_FLAGS_REQRESULT 0x40 |
#define ICMP6_RR_FLAGS_FORCEAPPLY 0x20 |
#define ICMP6_RR_FLAGS_SPECSITE 0x10 |
#define ICMP6_RR_FLAGS_PREVDONE 0x08 |
#define rr_type rr_hdr.icmp6_type |
#define rr_code rr_hdr.icmp6_code |
#define rr_cksum rr_hdr.icmp6_cksum |
#define rr_seqnum rr_hdr.icmp6_data32[0] |
struct rr_pco_match { /* match prefix part */ |
u_int8_t rpm_code; |
u_int8_t rpm_len; |
u_int8_t rpm_ordinal; |
u_int8_t rpm_matchlen; |
u_int8_t rpm_minlen; |
u_int8_t rpm_maxlen; |
u_int16_t rpm_reserved; |
struct in6_addr rpm_prefix; |
}; |
#define RPM_PCO_ADD 1 |
#define RPM_PCO_CHANGE 2 |
#define RPM_PCO_SETGLOBAL 3 |
#define RPM_PCO_MAX 4 |
struct rr_pco_use { /* use prefix part */ |
u_int8_t rpu_uselen; |
u_int8_t rpu_keeplen; |
u_int8_t rpu_ramask; |
u_int8_t rpu_raflags; |
u_int32_t rpu_vltime; |
u_int32_t rpu_pltime; |
u_int32_t rpu_flags; |
struct in6_addr rpu_prefix; |
}; |
#define ICMP6_RR_PCOUSE_RAFLAGS_ONLINK 0x80 |
#define ICMP6_RR_PCOUSE_RAFLAGS_AUTO 0x40 |
#if BYTE_ORDER == BIG_ENDIAN |
#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80000000 |
#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40000000 |
#elif BYTE_ORDER == LITTLE_ENDIAN |
#define ICMP6_RR_PCOUSE_FLAGS_DECRVLTIME 0x80 |
#define ICMP6_RR_PCOUSE_FLAGS_DECRPLTIME 0x40 |
#endif |
struct rr_result { /* router renumbering result message */ |
u_int16_t rrr_flags; |
u_int8_t rrr_ordinal; |
u_int8_t rrr_matchedlen; |
u_int32_t rrr_ifid; |
struct in6_addr rrr_prefix; |
}; |
#include <sys/packoff.h> |
#if BYTE_ORDER == BIG_ENDIAN |
#define ICMP6_RR_RESULT_FLAGS_OOB 0x0002 |
#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0001 |
#elif BYTE_ORDER == LITTLE_ENDIAN |
#define ICMP6_RR_RESULT_FLAGS_OOB 0x0200 |
#define ICMP6_RR_RESULT_FLAGS_FORBIDDEN 0x0100 |
#endif |
/* |
* icmp6 filter structures. |
*/ |
struct icmp6_filter { |
u_int32_t icmp6_filt[8]; |
}; |
#define ICMP6_FILTER_SETPASSALL(filterp) \ |
memset(filterp, 0xff, sizeof(struct icmp6_filter)) |
#define ICMP6_FILTER_SETBLOCKALL(filterp) \ |
memset(filterp, 0x00, sizeof(struct icmp6_filter)) |
#define ICMP6_FILTER_SETPASS(type, filterp) \ |
(((filterp)->icmp6_filt[(type) >> 5]) |= (1 << ((type) & 31))) |
#define ICMP6_FILTER_SETBLOCK(type, filterp) \ |
(((filterp)->icmp6_filt[(type) >> 5]) &= ~(1 << ((type) & 31))) |
#define ICMP6_FILTER_WILLPASS(type, filterp) \ |
((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) != 0) |
#define ICMP6_FILTER_WILLBLOCK(type, filterp) \ |
((((filterp)->icmp6_filt[(type) >> 5]) & (1 << ((type) & 31))) == 0) |
/* |
* Variables related to this implementation |
* of the internet control message protocol version 6. |
*/ |
struct icmp6errstat { |
u_quad_t icp6errs_dst_unreach_noroute; |
u_quad_t icp6errs_dst_unreach_admin; |
u_quad_t icp6errs_dst_unreach_beyondscope; |
u_quad_t icp6errs_dst_unreach_addr; |
u_quad_t icp6errs_dst_unreach_noport; |
u_quad_t icp6errs_packet_too_big; |
u_quad_t icp6errs_time_exceed_transit; |
u_quad_t icp6errs_time_exceed_reassembly; |
u_quad_t icp6errs_paramprob_header; |
u_quad_t icp6errs_paramprob_nextheader; |
u_quad_t icp6errs_paramprob_option; |
u_quad_t icp6errs_redirect; /* we regard redirect as an error here */ |
u_quad_t icp6errs_unknown; |
}; |
struct icmp6stat { |
/* statistics related to icmp6 packets generated */ |
u_quad_t icp6s_error; /* # of calls to icmp6_error */ |
u_quad_t icp6s_canterror; /* no error 'cuz old was icmp */ |
u_quad_t icp6s_toofreq; /* no error 'cuz rate limitation */ |
u_quad_t icp6s_outhist[256]; |
/* statistics related to input message processed */ |
u_quad_t icp6s_badcode; /* icmp6_code out of range */ |
u_quad_t icp6s_tooshort; /* packet < sizeof(struct icmp6_hdr) */ |
u_quad_t icp6s_checksum; /* bad checksum */ |
u_quad_t icp6s_badlen; /* calculated bound mismatch */ |
/* |
* number of responses: this member is inherited from netinet code, but |
* for netinet6 code, it is already available in icp6s_outhist[]. |
*/ |
u_quad_t icp6s_reflect; |
u_quad_t icp6s_inhist[256]; |
u_quad_t icp6s_nd_toomanyopt; /* too many ND options */ |
struct icmp6errstat icp6s_outerrhist; |
#define icp6s_odst_unreach_noroute \ |
icp6s_outerrhist.icp6errs_dst_unreach_noroute |
#define icp6s_odst_unreach_admin icp6s_outerrhist.icp6errs_dst_unreach_admin |
#define icp6s_odst_unreach_beyondscope \ |
icp6s_outerrhist.icp6errs_dst_unreach_beyondscope |
#define icp6s_odst_unreach_addr icp6s_outerrhist.icp6errs_dst_unreach_addr |
#define icp6s_odst_unreach_noport icp6s_outerrhist.icp6errs_dst_unreach_noport |
#define icp6s_opacket_too_big icp6s_outerrhist.icp6errs_packet_too_big |
#define icp6s_otime_exceed_transit \ |
icp6s_outerrhist.icp6errs_time_exceed_transit |
#define icp6s_otime_exceed_reassembly \ |
icp6s_outerrhist.icp6errs_time_exceed_reassembly |
#define icp6s_oparamprob_header icp6s_outerrhist.icp6errs_paramprob_header |
#define icp6s_oparamprob_nextheader \ |
icp6s_outerrhist.icp6errs_paramprob_nextheader |
#define icp6s_oparamprob_option icp6s_outerrhist.icp6errs_paramprob_option |
#define icp6s_oredirect icp6s_outerrhist.icp6errs_redirect |
#define icp6s_ounknown icp6s_outerrhist.icp6errs_unknown |
u_quad_t icp6s_pmtuchg; /* path MTU changes */ |
u_quad_t icp6s_nd_badopt; /* bad ND options */ |
u_quad_t icp6s_badns; /* bad neighbor solicitation */ |
u_quad_t icp6s_badna; /* bad neighbor advertisement */ |
u_quad_t icp6s_badrs; /* bad router advertisement */ |
u_quad_t icp6s_badra; /* bad router advertisement */ |
u_quad_t icp6s_badredirect; /* bad redirect message */ |
}; |
/* |
* Names for ICMP sysctl objects |
*/ |
#define ICMPV6CTL_STATS 1 |
#define ICMPV6CTL_REDIRACCEPT 2 /* accept/process redirects */ |
#define ICMPV6CTL_REDIRTIMEOUT 3 /* redirect cache time */ |
#define ICMPV6CTL_ND6_PRUNE 6 |
#define ICMPV6CTL_ND6_DELAY 8 |
#define ICMPV6CTL_ND6_UMAXTRIES 9 |
#define ICMPV6CTL_ND6_MMAXTRIES 10 |
#define ICMPV6CTL_ND6_USELOOPBACK 11 |
/*#define ICMPV6CTL_ND6_PROXYALL 12 obsoleted, do not reuse here */ |
#define ICMPV6CTL_NODEINFO 13 |
#define ICMPV6CTL_ERRPPSLIMIT 14 /* ICMPv6 error pps limitation */ |
#define ICMPV6CTL_ND6_MAXNUDHINT 15 |
#define ICMPV6CTL_MTUDISC_HIWAT 16 |
#define ICMPV6CTL_MTUDISC_LOWAT 17 |
#define ICMPV6CTL_ND6_DEBUG 18 |
#define ICMPV6CTL_ND6_DRLIST 19 |
#define ICMPV6CTL_ND6_PRLIST 20 |
#define ICMPV6CTL_MAXID 21 |
#define ICMPV6CTL_NAMES { \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ "rediraccept", CTLTYPE_INT }, \ |
{ "redirtimeout", CTLTYPE_INT }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ "nd6_prune", CTLTYPE_INT }, \ |
{ 0, 0 }, \ |
{ "nd6_delay", CTLTYPE_INT }, \ |
{ "nd6_umaxtries", CTLTYPE_INT }, \ |
{ "nd6_mmaxtries", CTLTYPE_INT }, \ |
{ "nd6_useloopback", CTLTYPE_INT }, \ |
{ 0, 0 }, \ |
{ "nodeinfo", CTLTYPE_INT }, \ |
{ "errppslimit", CTLTYPE_INT }, \ |
{ "nd6_maxnudhint", CTLTYPE_INT }, \ |
{ "mtudisc_hiwat", CTLTYPE_INT }, \ |
{ "mtudisc_lowat", CTLTYPE_INT }, \ |
{ "nd6_debug", CTLTYPE_INT }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
} |
#define RTF_PROBEMTU RTF_PROTO1 |
#ifdef _KERNEL |
# ifdef __STDC__ |
struct rtentry; |
struct rttimer; |
struct in6_multi; |
# endif |
void icmp6_init(void); |
void icmp6_paramerror(struct mbuf *, int); |
void icmp6_error(struct mbuf *, int, int, int); |
int icmp6_input(struct mbuf **, int *, int); |
void icmp6_fasttimo(void); |
void icmp6_reflect(struct mbuf *, size_t); |
void icmp6_prepare(struct mbuf *); |
void icmp6_redirect_input(struct mbuf *, int); |
void icmp6_redirect_output(struct mbuf *, struct rtentry *); |
struct ip6ctlparam; |
void icmp6_mtudisc_update(struct ip6ctlparam *, int); |
/* XXX: is this the right place for these macros? */ |
#define icmp6_ifstat_inc(ifp, tag) \ |
do { \ |
if ((ifp) && (ifp)->if_index <= if_index \ |
&& (ifp)->if_index < icmp6_ifstatmax \ |
&& icmp6_ifstat && icmp6_ifstat[(ifp)->if_index]) { \ |
icmp6_ifstat[(ifp)->if_index]->tag++; \ |
} \ |
} while (0) |
#define icmp6_ifoutstat_inc(ifp, type, code) \ |
do { \ |
icmp6_ifstat_inc(ifp, ifs6_out_msg); \ |
if (type < ICMP6_INFOMSG_MASK) \ |
icmp6_ifstat_inc(ifp, ifs6_out_error); \ |
switch(type) { \ |
case ICMP6_DST_UNREACH: \ |
icmp6_ifstat_inc(ifp, ifs6_out_dstunreach); \ |
if (code == ICMP6_DST_UNREACH_ADMIN) \ |
icmp6_ifstat_inc(ifp, ifs6_out_adminprohib); \ |
break; \ |
case ICMP6_PACKET_TOO_BIG: \ |
icmp6_ifstat_inc(ifp, ifs6_out_pkttoobig); \ |
break; \ |
case ICMP6_TIME_EXCEEDED: \ |
icmp6_ifstat_inc(ifp, ifs6_out_timeexceed); \ |
break; \ |
case ICMP6_PARAM_PROB: \ |
icmp6_ifstat_inc(ifp, ifs6_out_paramprob); \ |
break; \ |
case ICMP6_ECHO_REQUEST: \ |
icmp6_ifstat_inc(ifp, ifs6_out_echo); \ |
break; \ |
case ICMP6_ECHO_REPLY: \ |
icmp6_ifstat_inc(ifp, ifs6_out_echoreply); \ |
break; \ |
case MLD_LISTENER_QUERY: \ |
icmp6_ifstat_inc(ifp, ifs6_out_mldquery); \ |
break; \ |
case MLD_LISTENER_REPORT: \ |
icmp6_ifstat_inc(ifp, ifs6_out_mldreport); \ |
break; \ |
case MLD_LISTENER_DONE: \ |
icmp6_ifstat_inc(ifp, ifs6_out_mlddone); \ |
break; \ |
case ND_ROUTER_SOLICIT: \ |
icmp6_ifstat_inc(ifp, ifs6_out_routersolicit); \ |
break; \ |
case ND_ROUTER_ADVERT: \ |
icmp6_ifstat_inc(ifp, ifs6_out_routeradvert); \ |
break; \ |
case ND_NEIGHBOR_SOLICIT: \ |
icmp6_ifstat_inc(ifp, ifs6_out_neighborsolicit); \ |
break; \ |
case ND_NEIGHBOR_ADVERT: \ |
icmp6_ifstat_inc(ifp, ifs6_out_neighboradvert); \ |
break; \ |
case ND_REDIRECT: \ |
icmp6_ifstat_inc(ifp, ifs6_out_redirect); \ |
break; \ |
} \ |
} while (0) |
extern int icmp6_rediraccept; /* accept/process redirects */ |
extern int icmp6_redirtimeout; /* cache time for redirect routes */ |
#endif /* _KERNEL */ |
#endif /* not _NETINET_ICMP6_H_ */ |
/pkgnet/tags/20220214/watt32/inc/netinet/icmp_var.h |
---|
0,0 → 1,86 |
/*!\file netinet/icmp_var.h |
* Internal ICMP statistics. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)icmp_var.h 8.1 (Berkeley) 6/10/93 |
* $Id: icmp_var.h,v 1.4 1995/02/16 00:27:40 wollman Exp $ |
*/ |
#ifndef __NETINET_ICMP_VAR_H |
#define __NETINET_ICMP_VAR_H |
#ifndef ICMP_MAXTYPE |
#define ICMP_MAXTYPE 18 |
#endif |
/* |
* Variables related to this implementation |
* of the internet control message protocol. |
*/ |
struct icmpstat { |
/* statistics related to icmp packets generated */ |
u_long icps_error; /* # of calls to icmp_error */ |
u_long icps_oldshort; /* no error 'cuz old ip too short */ |
u_long icps_oldicmp; /* no error 'cuz old was icmp */ |
u_long icps_outhist[ICMP_MAXTYPE + 1]; |
/* statistics related to input messages processed */ |
u_long icps_badcode; /* icmp_code out of range */ |
u_long icps_tooshort; /* packet < ICMP_MINLEN */ |
u_long icps_checksum; /* bad checksum */ |
u_long icps_badlen; /* calculated bound mismatch */ |
u_long icps_reflect; /* number of responses */ |
u_long icps_inhist[ICMP_MAXTYPE + 1]; |
u_long icps_bmcastecho; /* b/mcast echo requests dropped */ |
u_long icps_bmcasttstamp; /* b/mcast tstamp requests dropped */ |
u_long icps_badaddr; /* bad return address */ |
u_long icps_noroute; /* no route back */ |
}; |
/* |
* Names for ICMP sysctl objects |
*/ |
#define ICMPCTL_MASKREPL 1 /* allow replies to netmask requests */ |
#define ICMPCTL_STATS 2 /* statistics (read-only) */ |
#define ICMPCTL_ICMPLIM 3 |
#define ICMPCTL_MAXID 4 |
#define ICMPCTL_NAMES { \ |
{ 0, 0 }, \ |
{ "maskrepl", CTLTYPE_INT }, \ |
{ "stats", CTLTYPE_STRUCT }, \ |
{ "icmplim", CTLTYPE_INT }, \ |
} |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/if_ether.h |
---|
0,0 → 1,225 |
/*!\file inc/netinet/if_ether.h |
* Ethernet definitions. |
*/ |
/* Modified for emx by hv 1994 |
* |
* Copyright (c) 1982, 1986 Regents of the University of California. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* from: @(#)if_ether.h 7.5 (Berkeley) 6/28/90 |
* $Id: if_ether.h,v 1.8 1994/02/02 05:58:54 hpeyerl Exp $ |
*/ |
#ifndef __NETINET_IF_ETHER_H |
#define __NETINET_IF_ETHER_H |
#include <sys/packon.h> |
/* |
* Ethernet address - 6 octets |
* this is only used by the ethers(3) functions. |
*/ |
struct ether_addr { |
u_char ether_addr_octet[6]; |
}; |
/* |
* Structure of a 10Mb/s Ethernet header. |
*/ |
struct ether_header { |
u_char ether_dhost[6]; |
u_char ether_shost[6]; |
u_short ether_type; |
}; |
#define ETHERTYPE_PUP 0x0200 /* PUP protocol */ |
/* the IBM header corrects the following to 0x608 for OS/2 but I believe |
* this is just a dirty hack |
*/ |
#define ETHERTYPE_ARP 0x0806 /* address resolution protocol */ |
#define ETHERTYPE_IP 0x0800 /* IP protocol */ |
#define ETHERTYPE_REVARP 0x8035 /* reverse addr resolution protocol */ |
/* |
* The ETHERTYPE_NTRAILER packet types starting at ETHERTYPE_TRAIL have |
* (type-ETHERTYPE_TRAIL)*512 bytes of data followed |
* by an ETHER type (as given above) and then the (variable-length) header. |
*/ |
#define ETHERTYPE_TRAIL 0x1000 /* Trailer packet */ |
#define ETHERTYPE_NTRAILER 16 |
#define ETHERMTU 1500 |
#define ETHERMIN (60-14) |
/* |
* Macro to map an IP multicast address to an Ethernet multicast address. |
* The high-order 25 bits of the Ethernet address are statically assigned, |
* and the low-order 23 bits are taken from the low end of the IP address. |
*/ |
#define ETHER_MAP_IP_MULTICAST(ipaddr, enaddr) \ |
/* struct in_addr *ipaddr; */ \ |
/* u_char enaddr[6]; */ \ |
{ \ |
(enaddr)[0] = 0x01; \ |
(enaddr)[1] = 0x00; \ |
(enaddr)[2] = 0x5e; \ |
(enaddr)[3] = ((u_char *)ipaddr)[1] & 0x7f; \ |
(enaddr)[4] = ((u_char *)ipaddr)[2]; \ |
(enaddr)[5] = ((u_char *)ipaddr)[3]; \ |
} |
/* |
* Ethernet Address Resolution Protocol. |
* |
* See RFC 826 for protocol description. Structure below is adapted |
* to resolving internet addresses. Field names used correspond to |
* RFC 826. |
*/ |
struct ether_arp { |
struct arphdr ea_hdr; /* fixed-size header */ |
u_char arp_sha[6]; /* sender hardware address */ |
u_char arp_spa[4]; /* sender protocol address */ |
u_char arp_tha[6]; /* target hardware address */ |
u_char arp_tpa[4]; /* target protocol address */ |
}; |
#define arp_hrd ea_hdr.ar_hrd |
#define arp_pro ea_hdr.ar_pro |
#define arp_hln ea_hdr.ar_hln |
#define arp_pln ea_hdr.ar_pln |
#define arp_op ea_hdr.ar_op |
/* |
* Structure shared between the ethernet driver modules and |
* the address resolution code. For example, each ec_softc or il_softc |
* begins with this structure. |
*/ |
struct arpcom { |
struct ifnet ac_if; /* network-visible interface */ |
u_char ac_enaddr[6]; /* ethernet hardware address */ |
struct in_addr ac_ipaddr; /* copy of ip address- XXX */ |
struct ether_multi *ac_multiaddrs; /* list of ether multicast addrs */ |
int ac_multicnt; /* length of ac_multiaddrs list */ |
}; |
/* |
* Internet to ethernet address resolution table. |
*/ |
struct arptab { |
struct in_addr at_iaddr; /* internet address */ |
u_char at_enaddr[6]; /* ethernet address */ |
u_char at_timer; /* minutes since last reference */ |
u_char at_flags; /* flags */ |
struct mbuf *at_hold; /* last packet until resolved/timeout */ |
/* only os2 */ |
u_short at_rcf; |
u_short at_rseg[8]; |
u_long at_millisec; |
int at_interface; |
}; |
extern u_char etherbroadcastaddr[6]; |
extern u_char ether_ipmulticast_min[6]; |
extern u_char ether_ipmulticast_max[6]; |
/* |
* Ethernet multicast address structure. There is one of these for each |
* multicast address or range of multicast addresses that we are supposed |
* to listen to on a particular interface. They are kept in a linked list, |
* rooted in the interface's arpcom structure. (This really has nothing to |
* do with ARP, or with the Internet address family, but this appears to be |
* the minimally-disrupting place to put it.) |
*/ |
struct ether_multi { |
u_char enm_addrlo[6]; /* low or only address of range */ |
u_char enm_addrhi[6]; /* high or only address of range */ |
struct arpcom *enm_ac; /* back pointer to arpcom */ |
u_int enm_refcount; /* no. claims to this addr/range */ |
struct ether_multi *enm_next; /* ptr to next ether_multi */ |
}; |
/* |
* Structure used by macros below to remember position when stepping through |
* all of the ether_multi records. |
*/ |
struct ether_multistep { |
struct ether_multi *e_enm; |
}; |
#include <sys/packoff.h> |
/* |
* Macro for looking up the ether_multi record for a given range of Ethernet |
* multicast addresses connected to a given arpcom structure. If no matching |
* record is found, "enm" returns NULL. |
*/ |
#define ETHER_LOOKUP_MULTI(addrlo, addrhi, ac, enm) \ |
/* u_char addrlo[6]; */ \ |
/* u_char addrhi[6]; */ \ |
/* struct arpcom *ac; */ \ |
/* struct ether_multi *enm; */ \ |
{ \ |
for ((enm) = (ac)->ac_multiaddrs; \ |
(enm) != NULL && \ |
(bcmp((enm)->enm_addrlo, (addrlo), 6) != 0 || \ |
bcmp((enm)->enm_addrhi, (addrhi), 6) != 0); \ |
(enm) = (enm)->enm_next); \ |
} |
/* |
* Macro to step through all of the ether_multi records, one at a time. |
* The current position is remembered in "step", which the caller must |
* provide. ETHER_FIRST_MULTI(), below, must be called to initialize "step" |
* and get the first record. Both macros return a NULL "enm" when there |
* are no remaining records. |
*/ |
#define ETHER_NEXT_MULTI(step, enm) \ |
/* struct ether_multistep step; */ \ |
/* struct ether_multi *enm; */ \ |
{ \ |
if (((enm) = (step).e_enm) != NULL) \ |
(step).e_enm = (enm)->enm_next; \ |
} |
#define ETHER_FIRST_MULTI(step, ac, enm) \ |
/* struct ether_multistep step; */ \ |
/* struct arpcom *ac; */ \ |
/* struct ether_multi *enm; */ \ |
{ \ |
(step).e_enm = (ac)->ac_multiaddrs; \ |
ETHER_NEXT_MULTI((step), (enm)); \ |
} |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/if_fddi.h |
---|
0,0 → 1,80 |
/*!\file inc/netinet/if_fddi.h |
* FDDI header definition. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* Copyright (c) 1995 Matt Thomas (thomas@lkg.dec.com) |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)if_fddi.h 8.1 (Berkeley) 6/10/93 |
* $Id: if_fddi.h,v 1.3.4.1 1997/02/08 15:13:45 joerg Exp $ |
*/ |
#ifndef __NETINET_IF_FDDI_H |
#define __NETINET_IF_FDDI_H |
#include <sys/packon.h> |
/* |
* Structure of an 100Mb/s FDDI header. |
*/ |
struct fddi_header { |
u_char fddi_fc; |
u_char fddi_dhost[6]; |
u_char fddi_shost[6]; |
}; |
#include <sys/packoff.h> |
#define FDDIIPMTU 4352 |
#define FDDIMTU 4470 |
#define FDDIMIN 3 |
#define FDDIFC_C 0x80 /* 0b10000000 */ |
#define FDDIFC_L 0x40 /* 0b01000000 */ |
#define FDDIFC_F 0x30 /* 0b00110000 */ |
#define FDDIFC_Z 0x0F /* 0b00001111 */ |
#define FDDIFC_LLC_ASYNC 0x50 |
#define FDDIFC_LLC_PRIO0 0 |
#define FDDIFC_LLC_PRIO1 1 |
#define FDDIFC_LLC_PRIO2 2 |
#define FDDIFC_LLC_PRIO3 3 |
#define FDDIFC_LLC_PRIO4 4 |
#define FDDIFC_LLC_PRIO5 5 |
#define FDDIFC_LLC_PRIO6 6 |
#define FDDIFC_LLC_PRIO7 7 |
#define FDDIFC_LLC_SYNC 0xd0 |
#define FDDIFC_SMT 0x40 |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/igmp.h |
---|
0,0 → 1,105 |
/*!\file netinet/igmp.h |
* Internet Group Managment Protocol. |
*/ |
/* |
* Copyright (c) 1988 Stephen Deering. |
* Copyright (c) 1992, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* This code is derived from software contributed to Berkeley by |
* Stephen Deering of Stanford University. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)igmp.h 8.1 (Berkeley) 6/10/93 |
* $Id: igmp.h,v 1.7 1996/03/14 16:59:17 fenner Exp $ |
*/ |
#ifndef __NETINET_IGMP_H |
#define __NETINET_IGMP_H |
/* |
* Internet Group Management Protocol (IGMP) definitions. |
* |
* Written by Steve Deering, Stanford, May 1988. |
* |
* MULTICAST Revision: 3.5.1.2 |
*/ |
/* |
* IGMP packet format. |
*/ |
#include <sys/packon.h> |
struct igmp { |
u_char igmp_type; /* version & type of IGMP message */ |
u_char igmp_code; /* subtype for routing msgs */ |
u_short igmp_cksum; /* IP-style checksum */ |
struct in_addr igmp_group; /* group address being reported */ |
}; /* (zero for queries) */ |
#include <sys/packoff.h> |
#define IGMP_MINLEN 8 |
/* |
* Message types, including version number. |
*/ |
#define IGMP_MEMBERSHIP_QUERY 0x11 /* membership query */ |
#define IGMP_V1_MEMBERSHIP_REPORT 0x12 /* Ver. 1 membership report */ |
#define IGMP_V2_MEMBERSHIP_REPORT 0x16 /* Ver. 2 membership report */ |
#define IGMP_V2_LEAVE_GROUP 0x17 /* Leave-group message */ |
#define IGMP_DVMRP 0x13 /* DVMRP routing message */ |
#define IGMP_PIM 0x14 /* PIM routing message */ |
#define IGMP_MTRACE_RESP 0x1e /* traceroute resp.(to sender)*/ |
#define IGMP_MTRACE 0x1f /* mcast traceroute messages */ |
#define IGMP_MAX_HOST_REPORT_DELAY 10 /* max delay for response to */ |
/* query (in seconds) according */ |
/* to RFC1112 */ |
#define IGMP_TIMER_SCALE 10 /* denotes that the igmp code field */ |
/* specifies time in 10th of seconds*/ |
/* |
* The following four defininitions are for backwards compatibility. |
* They should be removed as soon as all applications are updated to |
* use the new constant names. |
*/ |
#define IGMP_HOST_MEMBERSHIP_QUERY IGMP_MEMBERSHIP_QUERY |
#define IGMP_HOST_MEMBERSHIP_REPORT IGMP_V1_MEMBERSHIP_REPORT |
#define IGMP_HOST_NEW_MEMBERSHIP_REPORT IGMP_V2_MEMBERSHIP_REPORT |
#define IGMP_HOST_LEAVE_MESSAGE IGMP_V2_LEAVE_GROUP |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/igmp_var.h |
---|
0,0 → 1,82 |
/*!\file netinet/igmp_var.h |
* Internal IGMP statistics. |
*/ |
/* |
* Copyright (c) 1988 Stephen Deering. |
* Copyright (c) 1992, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* This code is derived from software contributed to Berkeley by |
* Stephen Deering of Stanford University. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)igmp_var.h 8.1 (Berkeley) 7/19/93 |
* $Id: igmp_var.h,v 1.9 1996/03/14 16:59:18 fenner Exp $ |
*/ |
#ifndef __NETINET_IGMP_VAR_H |
#define __NETINET_IGMP_VAR_H |
/* |
* Internet Group Management Protocol (IGMP), |
* implementation-specific definitions. |
* |
* Written by Steve Deering, Stanford, May 1988. |
* |
* MULTICAST Revision: 3.5.1.3 |
*/ |
struct igmpstat { |
u_int igps_rcv_total; /* total IGMP messages received */ |
u_int igps_rcv_tooshort; /* received with too few bytes */ |
u_int igps_rcv_badsum; /* received with bad checksum */ |
u_int igps_rcv_queries; /* received membership queries */ |
u_int igps_rcv_badqueries; /* received invalid queries */ |
u_int igps_rcv_reports; /* received membership reports */ |
u_int igps_rcv_badreports; /* received invalid reports */ |
u_int igps_rcv_ourreports; /* received reports for our groups */ |
u_int igps_snd_reports; /* sent membership reports */ |
}; |
/* |
* Names for IGMP sysctl objects |
*/ |
#define IGMPCTL_STATS 1 /* statistics (read-only) */ |
#define IGMPCTL_MAXID 2 |
#define IGMPCTL_NAMES { \ |
{ 0, 0 }, \ |
{ "stats", CTLTYPE_STRUCT }, \ |
} |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/in.h |
---|
0,0 → 1,440 |
/*!\file netinet/in.h |
* IP address, options and definitions. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1990, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)in.h 8.3 (Berkeley) 1/3/94 |
* $Id: in.h,v 1.22.2.1 1996/11/11 23:40:37 phk Exp $ |
*/ |
#ifndef __NETINET_IN_H |
#define __NETINET_IN_H |
#ifndef __SYS_SOCKET_H |
#include <sys/socket.h> |
#endif |
/* |
* Constants and structures defined by the internet system, |
* Per RFC 790, September 1981, and numerous additions. |
*/ |
/* |
* Protocols |
*/ |
#define IPPROTO_IP 0 /* dummy for IP */ |
#define IPPROTO_ICMP 1 /* control message protocol */ |
#define IPPROTO_IGMP 2 /* group mgmt protocol */ |
#define IPPROTO_GGP 3 /* gateway^2 (deprecated) */ |
#define IPPROTO_IPIP 4 /* IP encapsulation in IP */ |
#define IPPROTO_TCP 6 /* tcp */ |
#define IPPROTO_EGP 8 /* exterior gateway protocol */ |
#define IPPROTO_IGRP 9 /* interior gw routing protocol */ |
#define IPPROTO_PUP 12 /* pup */ |
#define IPPROTO_UDP 17 /* user datagram protocol */ |
#define IPPROTO_IDP 22 /* xns idp */ |
#define IPPROTO_TP 29 /* tp-4 w/ class negotiation */ |
#define IPPROTO_XTP 36 /* eXpress Transfer Protocol */ |
#define IPPROTO_RSVP 46 /* resource reservation */ |
#define IPPROTO_ESP 50 |
#define IPPROTO_AH 51 /* authenticate header */ |
#define IPPROTO_ICMPV6 58 /* ICMP v6 */ |
#define IPPROTO_NONE 59 |
#define IPPROTO_EON 80 /* ISO cnlp */ |
#define IPPROTO_ENCAP 98 /* encapsulation header */ |
#define IPPROTO_PIM 103 |
#define IPPROTO_VRRP 112 |
#define IPPROTO_SCTP 132 |
#define IPPROTO_DIVERT 254 /* divert pseudo-protocol */ |
#define IPPROTO_RAW 255 /* raw IP packet */ |
#define IPPROTO_MAX 256 |
/* |
* Local port number conventions: |
* |
* When a user does a bind(2) or connect(2) with a port number of zero, |
* a non-conflicting local port address is chosen. |
* The default range is IPPORT_RESERVED through |
* IPPORT_USERRESERVED, although that is settable by sysctl. |
* |
* A user may set the IPPROTO_IP option IP_PORTRANGE to change this |
* default assignment range. |
* |
* The value IP_PORTRANGE_DEFAULT causes the default behavior. |
* |
* The value IP_PORTRANGE_HIGH changes the range of candidate port numbers |
* into the "high" range. These are reserved for client outbound connections |
* which do not want to be filtered by any firewalls. |
* |
* The value IP_PORTRANGE_LOW changes the range to the "low" are |
* that is (by convention) restricted to privileged processes. This |
* convention is based on "vouchsafe" principles only. It is only secure |
* if you trust the remote host to restrict these ports. |
* |
* The default range of ports and the high range can be changed by |
* sysctl(3). (net.inet.ip.port{hi,low}{first,last}_auto) |
* |
* Changing those values has bad security implications if you are |
* using a a stateless firewall that is allowing packets outside of that |
* range in order to allow transparent outgoing connections. |
* |
* Such a firewall configuration will generally depend on the use of these |
* default values. If you change them, you may find your Security |
* Administrator looking for you with a heavy object. |
*/ |
/* |
* Ports < IPPORT_RESERVED are reserved for |
* privileged processes (e.g. root). (IP_PORTRANGE_LOW) |
* Ports > IPPORT_USERRESERVED are reserved |
* for servers, not necessarily privileged. (IP_PORTRANGE_DEFAULT) |
*/ |
#define IPPORT_RESERVED 1024 |
#define IPPORT_USERRESERVED 5000 |
/* |
* Default local port range to use by setting IP_PORTRANGE_HIGH |
*/ |
#define IPPORT_HIFIRSTAUTO 40000 |
#define IPPORT_HILASTAUTO 44999 |
/* |
* Scanning for a free reserved port return a value below IPPORT_RESERVED, |
* but higher than IPPORT_RESERVEDSTART. Traditionally the start value was |
* 512, but that conflicts with some well-known-services that firewalls may |
* have a fit if we use. |
*/ |
#define IPPORT_RESERVEDSTART 600 |
/* |
* Internet address (a structure for historical reasons) |
*/ |
struct in_addr { |
u_long s_addr; |
}; |
/* |
* For IPv6 from RFC2133 |
*/ |
struct in6_addr { |
u_int8_t s6_addr[16]; |
}; |
/* |
* Definitions of bits in internet address integers. |
* On subnets, the decomposition of addresses to host and net parts |
* is done according to subnet mask, not the masks here. |
*/ |
#define IN_CLASSA(i) (((long)(i) & 0x80000000) == 0) |
#define IN_CLASSA_NET 0xff000000 |
#define IN_CLASSA_NSHIFT 24 |
#define IN_CLASSA_HOST 0x00ffffff |
#define IN_CLASSA_MAX 128 |
#define IN_CLASSB(i) (((long)(i) & 0xC0000000) == 0x80000000) |
#define IN_CLASSB_NET 0xffff0000 |
#define IN_CLASSB_NSHIFT 16 |
#define IN_CLASSB_HOST 0x0000ffff |
#define IN_CLASSB_MAX 65536 |
#define IN_CLASSC(i) (((long)(i) & 0xE0000000) == 0xC0000000) |
#define IN_CLASSC_NET 0xffffff00 |
#define IN_CLASSC_NSHIFT 8 |
#define IN_CLASSC_HOST 0x000000ff |
#define IN_CLASSD(i) (((long)(i) & 0xF0000000) == 0xE0000000) |
#define IN_CLASSD_NET 0xf0000000 /* These ones aren't really */ |
#define IN_CLASSD_NSHIFT 28 /* net and host fields, but */ |
#define IN_CLASSD_HOST 0x0fffffff /* routing needn't know. */ |
#define IN_MULTICAST(i) IN_CLASSD(i) |
#define IN_EXPERIMENTAL(i) (((long)(i) & 0xF0000000) == 0xF0000000) |
#define IN_BADCLASS(i) (((long)(i) & 0xF0000000) == 0xF0000000) |
#define INADDR_ANY (u_long)0x00000000 |
#define INADDR_BROADCAST (u_long)0xFFFFFFFF /* must be masked */ |
#define INADDR_LOOPBACK (u_long)0x7F000001 /* 127.0.0.1 */ |
#define INADDR_NONE 0xFFFFFFFF /* -1 return */ |
#define INADDR_UNSPEC_GROUP (u_long)0xE0000000 /* 224.0.0.0 */ |
#define INADDR_ALLHOSTS_GROUP (u_long)0xE0000001 /* 224.0.0.1 */ |
#define INADDR_ALLRTRS_GROUP (u_long)0xE0000002 /* 224.0.0.2 */ |
#define INADDR_MAX_LOCAL_GROUP (u_long)0xE00000FF /* 224.0.0.255 */ |
#define IN_LOOPBACKNET 127 /* official! */ |
W32_DATA const struct in6_addr in6addr_any; /* :: */ |
W32_DATA const struct in6_addr in6addr_loopback; /* ::1 */ |
#define IN6ADDR_ANY_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0 } } } |
#define IN6ADDR_LOOPBACK_INIT { { { 0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,1 } } } |
#define INET_ADDRSTRLEN 16 |
#define INET6_ADDRSTRLEN 46 |
/* |
* Socket address, internet style. |
*/ |
struct sockaddr_in { |
u_short sin_family; |
u_short sin_port; |
struct in_addr sin_addr; |
char sin_zero[8]; |
}; |
struct sockaddr_in6 { |
u_int16_t sin6_family; |
u_int16_t sin6_port; |
u_int32_t sin6_flowinfo; |
struct in6_addr sin6_addr; |
u_int32_t sin6_scope_id; /* IPv6 scope-id */ |
}; |
/* |
* Stolen from winsock2.h (hope this is portable) |
* Portable IPv6/IPv4 version of sockaddr. |
* Uses padding to force 8 byte alignment |
* and maximum size of 128 bytes |
*/ |
struct sockaddr_storage { |
u_short ss_family; |
u_short ss_len; /* !! added for BSD progs, gv Nov-2003 */ |
char __ss_pad1[6]; /* pad to 8 */ |
long __ss_align1, __ssalign2; /* force alignment */ |
char __ss_pad2[110]; /* pad to 128 */ |
}; |
/* IPv6 multicast request. */ |
struct ipv6_mreq { |
/* IPv6 multicast address of group */ |
struct in6_addr ipv6mr_multiaddr; |
/* local interface */ |
unsigned long ipv6mr_interface; |
}; |
/* |
* Structure used to describe IP options. |
* Used to store options internally, to pass them to a process, |
* or to restore options retrieved earlier. |
* The ip_dst is used for the first-hop gateway when using a source route |
* (this gets put into the header proper). |
*/ |
struct ip_opts { |
struct in_addr ip_dst; /* first hop, 0 w/o src rt */ |
char IP_opts[40]; /* actually variable in size */ |
}; |
/* |
* Options for use with [gs]etsockopt at the IP level. |
* First word of comment is data type; bool is stored in int. |
*/ |
#define IP_OPTIONS 1 /* buf/ip_opts; set/get IP options */ |
#define IP_HDRINCL 2 /* int; header is included with data */ |
#define IP_TOS 3 /* int; IP type of service and preced. */ |
#define IP_TTL 4 /* int; IP time to live */ |
#define IP_RECVOPTS 5 /* bool; receive all IP opts w/dgram */ |
#define IP_RECVRETOPTS 6 /* bool; receive IP opts for response */ |
#define IP_RECVDSTADDR 7 /* bool; receive IP dst addr w/dgram */ |
#define IP_RETOPTS 8 /* ip_opts; set/get IP options */ |
#define IP_MULTICAST_IF 9 /* u_char; set/get IP multicast i/f */ |
#define IP_MULTICAST_TTL 10 /* u_char; set/get IP multicast ttl */ |
#define IP_MULTICAST_LOOP 11 /* u_char; set/get IP multicast loopback */ |
#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */ |
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */ |
#define IP_MULTICAST_VIF 14 /* set/get IP mcast virt. iface */ |
#define IP_RSVP_ON 15 /* enable RSVP in kernel */ |
#define IP_RSVP_OFF 16 /* disable RSVP in kernel */ |
#define IP_RSVP_VIF_ON 17 /* set RSVP per-vif socket */ |
#define IP_RSVP_VIF_OFF 18 /* unset RSVP per-vif socket */ |
#define IP_PORTRANGE 19 /* int; range to choose for unspec port */ |
#define IP_RECVIF 20 /* bool; receive reception if w/dgram */ |
#define IP_FW_ADD 50 /* add a firewall rule to chain */ |
#define IP_FW_DEL 51 /* delete a firewall rule from chain */ |
#define IP_FW_FLUSH 52 /* flush firewall rule chain */ |
#define IP_FW_ZERO 53 /* clear single/all firewall counter(s) */ |
#define IP_FW_GET 54 /* get entire firewall rule chain */ |
#define IP_NAT 55 /* set/get NAT opts */ |
/* |
* Defaults and limits for options |
*/ |
#define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */ |
#define IP_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */ |
#define IP_MAX_MEMBERSHIPS 20 /* per socket */ |
/* |
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP. |
*/ |
struct ip_mreq { |
struct in_addr imr_multiaddr; /* IP multicast address of group */ |
struct in_addr imr_interface; /* local IP address of interface */ |
}; |
/* |
* Argument for IP_PORTRANGE: |
* - which range to search when port is unspecified at bind() or connect() |
*/ |
#define IP_PORTRANGE_DEFAULT 0 /* default range */ |
#define IP_PORTRANGE_HIGH 1 /* "high" - request firewall bypass */ |
#define IP_PORTRANGE_LOW 2 /* "low" - vouchsafe security */ |
/* |
* Definitions for inet sysctl operations. |
* |
* Third level is protocol number. |
* Fourth level is desired variable within that protocol. |
*/ |
#define IPPROTO_MAXID (IPPROTO_IDP + 1) /* don't list to IPPROTO_MAX */ |
#define CTL_IPPROTO_NAMES { \ |
{ "ip", CTLTYPE_NODE }, \ |
{ "icmp", CTLTYPE_NODE }, \ |
{ "igmp", CTLTYPE_NODE }, \ |
{ "ggp", CTLTYPE_NODE }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ "tcp", CTLTYPE_NODE }, \ |
{ 0, 0 }, \ |
{ "egp", CTLTYPE_NODE }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ "pup", CTLTYPE_NODE }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ "udp", CTLTYPE_NODE }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ 0, 0 }, \ |
{ "idp", CTLTYPE_NODE }, \ |
} |
/* |
* Names for IP sysctl objects |
*/ |
#define IPCTL_FORWARDING 1 /* act as router */ |
#define IPCTL_SENDREDIRECTS 2 /* may send redirects when forwarding */ |
#define IPCTL_DEFTTL 3 /* default TTL */ |
#define IPCTL_DEFMTU 4 /* default MTU */ |
#define IPCTL_RTEXPIRE 5 /* cloned route expiration time */ |
#define IPCTL_RTMINEXPIRE 6 /* min value for expiration time */ |
#define IPCTL_RTMAXCACHE 7 /* trigger level for dynamic expire */ |
#define IPCTL_SOURCEROUTE 8 /* may perform source routes */ |
#define IPCTL_DIRECTEDBROADCAST 9 /* may re-broadcast received packets */ |
#define IPCTL_INTRQMAXLEN 10 /* max length of netisr queue */ |
#define IPCTL_INTRQDROPS 11 /* number of netisr q drops */ |
#define IPCTL_MAXID 12 |
#define IPCTL_NAMES { \ |
{ 0, 0 }, \ |
{ "forwarding", CTLTYPE_INT }, \ |
{ "redirect", CTLTYPE_INT }, \ |
{ "ttl", CTLTYPE_INT }, \ |
{ "mtu", CTLTYPE_INT }, \ |
{ "rtexpire", CTLTYPE_INT }, \ |
{ "rtminexpire", CTLTYPE_INT }, \ |
{ "rtmaxcache", CTLTYPE_INT }, \ |
{ "sourceroute", CTLTYPE_INT }, \ |
{ "directed-broadcast", CTLTYPE_INT }, \ |
{ "intr-queue-maxlen", CTLTYPE_INT }, \ |
{ "intr-queue-drops", CTLTYPE_INT }, \ |
} |
/* |
* IPv6 address macros |
*/ |
#define IN6_IS_ADDR_UNSPECIFIED(a) \ |
(((u_int32_t*)(a))[0] == 0 \ |
&& ((u_int32_t*)(a))[1] == 0 \ |
&& ((u_int32_t*)(a))[2] == 0 \ |
&& ((u_int32_t*)(a))[3] == 0) |
#define IN6_IS_ADDR_LOOPBACK(a) \ |
(((u_int32_t*)(a))[0] == 0 \ |
&& ((u_int32_t*)(a))[1] == 0 \ |
&& ((u_int32_t*)(a))[2] == 0 \ |
&& ((u_int32_t*)(a))[3] == htonl (1)) |
#define IN6_IS_ADDR_MULTICAST(a) (((u_int8_t*) (a))[0] == 0xff) |
#define IN6_IS_ADDR_LINKLOCAL(a) \ |
((((u_int32_t*)(a))[0] & htonl(0xffc00000)) == htonl(0xfe800000)) |
#define IN6_IS_ADDR_SITELOCAL(a) \ |
((((u_int32_t*)(a))[0] & htonl(0xffc00000)) == htonl(0xfec00000)) |
#define IN6_IS_ADDR_V4MAPPED(a) \ |
((((u_int32_t*)(a))[0] == 0) \ |
&& (((u_int32_t*)(a))[1] == 0) \ |
&& (((u_int32_t*)(a))[2] == htonl(0xffff))) |
#define IN6_IS_ADDR_V4COMPAT(a) \ |
((((u_int32_t*)(a))[0] == 0) \ |
&& (((u_int32_t*)(a))[1] == 0) \ |
&& (((u_int32_t*)(a))[2] == 0) \ |
&& (ntohl(((u_int32_t*)(a))[3]) > 1)) |
#define IN6_ARE_ADDR_EQUAL(a,b) \ |
((((u_int32_t*)(a))[0] == ((u_int32_t*)(b))[0]) \ |
&& (((u_int32_t*)(a))[1] == ((u_int32_t*)(b))[1]) \ |
&& (((u_int32_t*)(a))[2] == ((u_int32_t*)(b))[2]) \ |
&& (((u_int32_t*)(a))[3] == ((u_int32_t*)(b))[3])) |
#define IN6_IS_ADDR_MC_NODELOCAL(a) \ |
(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x1)) |
#define IN6_IS_ADDR_MC_LINKLOCAL(a) \ |
(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x2)) |
#define IN6_IS_ADDR_MC_SITELOCAL(a) \ |
(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x5)) |
#define IN6_IS_ADDR_MC_ORGLOCAL(a) \ |
(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0x8)) |
#define IN6_IS_ADDR_MC_GLOBAL(a) \ |
(IN6_IS_ADDR_MULTICAST(a) && ((((u_int8_t*)(a))[1] & 0xf) == 0xe)) |
#endif /* __NETINET_IN_H */ |
/pkgnet/tags/20220214/watt32/inc/netinet/in_pcb.h |
---|
0,0 → 1,100 |
/*!\file netinet/in_pcb.h |
* Internal IP structures. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1990, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)in_pcb.h 8.1 (Berkeley) 6/10/93 |
* $Id: in_pcb.h,v 1.14.2.2 1997/03/03 09:24:37 davidg Exp $ |
*/ |
#ifndef __NETINET_IN_PCB_H |
#define __NETINET_IN_PCB_H |
#include <sys/queue.h> |
/* |
* Common structure pcb for internet protocol implementation. |
* Here are stored pointers to local and foreign host table |
* entries, local and foreign socket numbers, and pointers |
* up (to a socket structure) and down (to a protocol-specific) |
* control block. |
*/ |
LIST_HEAD(inpcbhead, inpcb); |
struct inpcb { |
LIST_ENTRY(inpcb) inp_list; /* list for all PCBs of this proto */ |
LIST_ENTRY(inpcb) inp_hash; /* hash list */ |
struct inpcbinfo *inp_pcbinfo; |
struct in_addr inp_faddr; /* foreign host table entry */ |
u_short inp_fport; /* foreign port */ |
struct in_addr inp_laddr; /* local host table entry */ |
u_short inp_lport; /* local port */ |
struct socket *inp_socket; /* back pointer to socket */ |
caddr_t inp_ppcb; /* pointer to per-protocol pcb */ |
struct route inp_route; /* placeholder for routing entry */ |
int inp_flags; /* generic IP/datagram flags */ |
struct ip inp_ip; /* header prototype; should have more */ |
struct mbuf *inp_options; /* IP options */ |
struct ip_moptions *inp_moptions; /* IP multicast options */ |
}; |
struct inpcbinfo { |
struct inpcbhead *listhead; |
struct inpcbhead *hashbase; |
unsigned long hashmask; |
unsigned short lastport; |
unsigned short lastlow; |
unsigned short lasthi; |
}; |
#define INP_PCBHASH(faddr, lport, fport, mask) \ |
(((faddr) ^ ((faddr) >> 16) ^ (lport) ^ (fport)) & (mask)) |
/* flags in inp_flags: */ |
#define INP_RECVOPTS 0x01 /* receive incoming IP options */ |
#define INP_RECVRETOPTS 0x02 /* receive IP options for reply */ |
#define INP_RECVDSTADDR 0x04 /* receive IP dst address */ |
#define INP_HDRINCL 0x08 /* user supplies entire IP header */ |
#define INP_HIGHPORT 0x10 /* user wants "high" port binding */ |
#define INP_LOWPORT 0x20 /* user wants "low" port binding */ |
#define INP_ANONPORT 0x40 /* port chosen for user */ |
#define INP_RECVIF 0x80 /* receive incoming interface */ |
#define INP_CONTROLOPTS (INP_RECVOPTS|INP_RECVRETOPTS|INP_RECVDSTADDR|\ |
INP_RECVIF) |
#define INPLOOKUP_WILDCARD 1 |
#define sotoinpcb(so) ((struct inpcb *)(so)->so_pcb) |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/in_systm.h |
---|
0,0 → 1,62 |
/*!\file netinet/in_systm.h |
* Various typedefs. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)in_systm.h 8.1 (Berkeley) 6/10/93 |
* $Id: in_systm.h,v 1.3 1994/08/21 05:27:29 paul Exp $ |
*/ |
#ifndef __NETINET_IN_SYSTM_H |
#define __NETINET_IN_SYSTM_H |
/* |
* Miscellaneous internetwork |
* definitions for kernel. |
*/ |
/* |
* Network types. |
* |
* Internally the system keeps counters in the headers with the bytes |
* swapped so that VAX instructions will work on them. It reverses |
* the bytes before transmission at each protocol level. The n_ types |
* represent the types with the bytes in ``high-ender'' order. |
*/ |
typedef u_short n_short; /* short as received from the net */ |
typedef u_long n_long; /* long as received from the net */ |
typedef u_long n_time; /* ms since 00:00 GMT, byte rev */ |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/in_var.h |
---|
0,0 → 1,118 |
/*!\file netinet/in_var.h |
* IP interface address. |
*/ |
/* |
* Copyright (c) 1985, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)in_var.h 8.2 (Berkeley) 1/9/95 |
* $Id: in_var.h,v 1.17 1996/03/14 16:59:19 fenner Exp $ |
*/ |
#ifndef __NETINET_IN_VAR_H |
#define __NETINET_IN_VAR_H |
#include <sys/queue.h> |
/* |
* Interface address, Internet version. One of these structures |
* is allocated for each interface with an Internet address. |
* The ifaddr structure contains the protocol-independent part |
* of the structure and is assumed to be first. |
*/ |
struct in_ifaddr { |
struct ifaddr ia_ifa; /* protocol-independent info */ |
#define ia_ifp ia_ifa.ifa_ifp |
#define ia_flags ia_ifa.ifa_flags |
/* ia_{,sub}net{,mask} in host order */ |
u_long ia_net; /* network number of interface */ |
u_long ia_netmask; /* mask of net part */ |
u_long ia_subnet; /* subnet number, including net */ |
u_long ia_subnetmask; /* mask of subnet part */ |
struct in_addr ia_netbroadcast; /* to recognize net broadcasts */ |
struct in_ifaddr *ia_next; /* next in list of internet addresses */ |
struct sockaddr_in ia_addr; /* reserve space for interface name */ |
struct sockaddr_in ia_dstaddr; /* reserve space for broadcast addr */ |
#define ia_broadaddr ia_dstaddr |
struct sockaddr_in ia_sockmask; /* reserve space for general netmask */ |
LIST_HEAD(in_multihead, in_multi) ia_multiaddrs; |
/* list of multicast addresses */ |
}; |
struct in_aliasreq { |
char ifra_name[IFNAMSIZ]; /* if name, e.g. "en0" */ |
struct sockaddr_in ifra_addr; |
struct sockaddr_in ifra_broadaddr; |
#define ifra_dstaddr ifra_broadaddr |
struct sockaddr_in ifra_mask; |
}; |
/* |
* Given a pointer to an in_ifaddr (ifaddr), |
* return a pointer to the addr as a sockaddr_in. |
*/ |
#define IA_SIN(ia) (&(((struct in_ifaddr *)(ia))->ia_addr)) |
#define IA_DSTSIN(ia) (&(((struct in_ifaddr *)(ia))->ia_dstaddr)) |
#define IN_LNAOF(in, ifa) \ |
((ntohl((in).s_addr) & ~((struct in_ifaddr *)(ifa)->ia_subnetmask)) |
/* |
* This information should be part of the ifnet structure but we don't wish |
* to change that - as it might break a number of things |
*/ |
struct router_info { |
struct ifnet *rti_ifp; |
int rti_type; /* type of router which is querier on this interface */ |
int rti_time; /* # of slow timeouts since last old query */ |
struct router_info *rti_next; |
}; |
/* |
* Internet multicast address structure. There is one of these for each IP |
* multicast group to which this host belongs on a given network interface. |
* They are kept in a linked list, rooted in the interface's in_ifaddr |
* structure. |
*/ |
struct in_multi { |
LIST_ENTRY(in_multi) inm_entry; /* list glue */ |
struct in_addr inm_addr; /* IP multicast address */ |
struct ifnet *inm_ifp; /* back pointer to ifnet */ |
struct in_ifaddr *inm_ia; /* back pointer to in_ifaddr */ |
u_int inm_refcount; /* no. membership claims by sockets */ |
u_int inm_timer; /* IGMP membership report timer */ |
u_int inm_state; /* state of the membership */ |
struct router_info *inm_rti; /* router info*/ |
}; |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/ip.h |
---|
0,0 → 1,195 |
/*!\file netinet/ip.h |
* IPv4 header and options. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)ip.h 8.2 (Berkeley) 6/1/94 |
* $Id: ip.h,v 1.10 1996/10/23 18:35:49 wollman Exp $ |
*/ |
#ifndef __NETINET_IP_H |
#define __NETINET_IP_H |
#ifndef __NETINET_IN_SYSTM_H |
#include <netinet/in_systm.h> |
#endif |
#if defined(__TURBOC__) || defined(__BORLANDC__) |
#pragma warn -bbf- /* "Bitfields must be signed or unsigned int" warning */ |
#endif |
/* |
* Definitions for internet protocol version 4. |
* Per RFC 791, September 1981. |
*/ |
#define IPVERSION 4 |
#include <sys/packon.h> |
/* |
* Structure of an internet header, naked of options. |
* |
* We declare ip_len and ip_off to be short, rather than u_short |
* pragmatically since otherwise unsigned comparisons can result |
* against negative integers quite easily, and fail in subtle ways. |
*/ |
struct ip { |
#ifdef _IP_VHL |
u_char ip_vhl; /* version << 4 | header length >> 2 */ |
#else |
u_char ip_hl:4; /* header length */ |
u_char ip_v:4; /* version */ |
#endif |
u_char ip_tos; /* type of service */ |
u_short ip_len; /* total length */ |
u_short ip_id; /* identification */ |
u_short ip_off; /* fragment offset field */ |
#define IP_DF 0x4000 /* dont fragment flag */ |
#define IP_MF 0x2000 /* more fragments flag */ |
#define IP_OFFMASK 0x1FFF /* mask for fragmenting bits */ |
u_char ip_ttl; /* time to live */ |
u_char ip_p; /* protocol */ |
u_short ip_sum; /* checksum */ |
struct in_addr ip_src,ip_dst; /* source and dest address */ |
}; |
#ifdef _IP_VHL |
#define IP_MAKE_VHL(v,hl) ((v) << 4 | (hl)) |
#define IP_VHL_HL(vhl) ((vhl) & 0x0f) |
#define IP_VHL_V(vhl) ((vhl) >> 4) |
#define IP_VHL_BORING 0x45 |
#endif |
#define IP_MAXPACKET 65535 /* maximum packet size */ |
/* |
* Definitions for IP type of service (ip_tos) |
*/ |
#define IPTOS_LOWDELAY 0x10 |
#define IPTOS_THROUGHPUT 0x08 |
#define IPTOS_RELIABILITY 0x04 |
#define IPTOS_MINCOST 0x02 |
/* |
* Definitions for IP precedence (also in ip_tos) (hopefully unused) |
*/ |
#define IPTOS_PREC_NETCONTROL 0xe0 |
#define IPTOS_PREC_INTERNETCONTROL 0xc0 |
#define IPTOS_PREC_CRITIC_ECP 0xa0 |
#define IPTOS_PREC_FLASHOVERRIDE 0x80 |
#define IPTOS_PREC_FLASH 0x60 |
#define IPTOS_PREC_IMMEDIATE 0x40 |
#define IPTOS_PREC_PRIORITY 0x20 |
#define IPTOS_PREC_ROUTINE 0x00 |
/* |
* Definitions for options. |
*/ |
#define IPOPT_COPIED(o) ((o)&0x80) |
#define IPOPT_CLASS(o) ((o)&0x60) |
#define IPOPT_NUMBER(o) ((o)&0x1f) |
#define IPOPT_CONTROL 0x00 |
#define IPOPT_RESERVED1 0x20 |
#define IPOPT_DEBMEAS 0x40 |
#define IPOPT_RESERVED2 0x60 |
#define IPOPT_EOL 0 /* end of option list */ |
#define IPOPT_NOP 1 /* no operation */ |
#define IPOPT_RR 7 /* record packet route */ |
#define IPOPT_TS 68 /* timestamp */ |
#define IPOPT_SECURITY 130 /* provide s,c,h,tcc */ |
#define IPOPT_LSRR 131 /* loose source route */ |
#define IPOPT_SATID 136 /* satnet id */ |
#define IPOPT_SSRR 137 /* strict source route */ |
#define IPOPT_RA 148 /* router alert */ |
/* |
* Offsets to fields in options other than EOL and NOP. |
*/ |
#define IPOPT_OPTVAL 0 /* option ID */ |
#define IPOPT_OLEN 1 /* option length */ |
#define IPOPT_OFFSET 2 /* offset within option */ |
#define IPOPT_MINOFF 4 /* min value of above */ |
/* |
* Time stamp option structure. |
*/ |
struct ip_timestamp { |
u_char ipt_code; /* IPOPT_TS */ |
u_char ipt_len; /* size of structure (variable) */ |
u_char ipt_ptr; /* index of current entry */ |
u_char ipt_flg:4; /* flags, see below */ |
u_char ipt_oflw:4; /* overflow counter */ |
union ipt_timestamp { |
n_long ipt_time[1]; |
struct ipt_ta { |
struct in_addr ipt_addr; |
n_long ipt_time; |
} ipt_ta[1]; |
} ipt_timestamp; |
}; |
#include <sys/packoff.h> |
/* flag bits for ipt_flg */ |
#define IPOPT_TS_TSONLY 0 /* timestamps only */ |
#define IPOPT_TS_TSANDADDR 1 /* timestamps and addresses */ |
#define IPOPT_TS_PRESPEC 3 /* specified modules only */ |
/* bits for security (not byte swapped) */ |
#define IPOPT_SECUR_UNCLASS 0x0000 |
#define IPOPT_SECUR_CONFID 0xf135 |
#define IPOPT_SECUR_EFTO 0x789a |
#define IPOPT_SECUR_MMMM 0xbc4d |
#define IPOPT_SECUR_RESTR 0xaf13 |
#define IPOPT_SECUR_SECRET 0xd788 |
#define IPOPT_SECUR_TOPSECRET 0x6bc5 |
/* |
* Internet implementation parameters. |
*/ |
#define MAXTTL 255 /* maximum time to live (seconds) */ |
#define IPDEFTTL 64 /* default ttl, from RFC 1340 */ |
#define IPFRAGTTL 60 /* time to live for frags, slowhz */ |
#define IPTTLDEC 1 /* subtracted when forwarding */ |
#define IP_MSS 576 /* default maximum segment size */ |
#if defined(__TURBOC__) || defined(__BORLANDC__) |
#pragma warn -bbf. |
#endif |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/ip6.h |
---|
0,0 → 1,321 |
/*!\file netinet/ip6.h |
* IPv6 definitions. |
*/ |
/* $FreeBSD: src/sys/netinet/ip6.h,v 1.5 2001/06/11 12:39:00 ume Exp $ */ |
/* $KAME: ip6.h,v 1.18 2001/03/29 05:34:30 itojun Exp $ */ |
/* |
* Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. |
* All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. Neither the name of the project nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)ip.h 8.1 (Berkeley) 6/10/93 |
*/ |
#ifndef _NETINET_IP6_H_ |
#define _NETINET_IP6_H_ |
/* |
* Definition for internet protocol version 6. |
* RFC 2460 |
*/ |
#ifndef __SYS_WTYPES_H |
#include <sys/wtypes.h> |
#endif |
#include <sys/packon.h> |
struct ip6_hdr { |
union { |
struct ip6_hdrctl { |
u_int32_t ip6_un1_flow; /* 20 bits of flow-ID */ |
u_int16_t ip6_un1_plen; /* payload length */ |
u_int8_t ip6_un1_nxt; /* next header */ |
u_int8_t ip6_un1_hlim; /* hop limit */ |
} ip6_un1; |
u_int8_t ip6_un2_vfc; /* 4 bits version, top 4 bits class */ |
} ip6_ctlun; |
struct in6_addr ip6_src; /* source address */ |
struct in6_addr ip6_dst; /* destination address */ |
}; |
#define ip6_vfc ip6_ctlun.ip6_un2_vfc |
#define ip6_flow ip6_ctlun.ip6_un1.ip6_un1_flow |
#define ip6_plen ip6_ctlun.ip6_un1.ip6_un1_plen |
#define ip6_nxt ip6_ctlun.ip6_un1.ip6_un1_nxt |
#define ip6_hlim ip6_ctlun.ip6_un1.ip6_un1_hlim |
#define ip6_hops ip6_ctlun.ip6_un1.ip6_un1_hlim |
#define IPV6_VERSION 0x60 |
#define IPV6_VERSION_MASK 0xf0 |
#if BYTE_ORDER == BIG_ENDIAN |
#define IPV6_FLOWINFO_MASK 0x0fffffff /* flow info (28 bits) */ |
#define IPV6_FLOWLABEL_MASK 0x000fffff /* flow label (20 bits) */ |
#else |
#if BYTE_ORDER == LITTLE_ENDIAN |
#define IPV6_FLOWINFO_MASK 0xffffff0f /* flow info (28 bits) */ |
#define IPV6_FLOWLABEL_MASK 0xffff0f00 /* flow label (20 bits) */ |
#endif /* LITTLE_ENDIAN */ |
#endif |
#if 1 |
/* ECN bits proposed by Sally Floyd */ |
#define IP6TOS_CE 0x01 /* congestion experienced */ |
#define IP6TOS_ECT 0x02 /* ECN-capable transport */ |
#endif |
/* |
* Extension Headers |
*/ |
struct ip6_ext { |
u_int8_t ip6e_nxt; |
u_int8_t ip6e_len; |
}; |
/* Hop-by-Hop options header */ |
/* XXX should we pad it to force alignment on an 8-byte boundary? */ |
struct ip6_hbh { |
u_int8_t ip6h_nxt; /* next header */ |
u_int8_t ip6h_len; /* length in units of 8 octets */ |
/* followed by options */ |
}; |
/* Destination options header */ |
/* XXX should we pad it to force alignment on an 8-byte boundary? */ |
struct ip6_dest { |
u_int8_t ip6d_nxt; /* next header */ |
u_int8_t ip6d_len; /* length in units of 8 octets */ |
/* followed by options */ |
}; |
/* Option types and related macros */ |
#define IP6OPT_PAD1 0x00 /* 00 0 00000 */ |
#define IP6OPT_PADN 0x01 /* 00 0 00001 */ |
#define IP6OPT_JUMBO 0xC2 /* 11 0 00010 = 194 */ |
#define IP6OPT_NSAP_ADDR 0xC3 /* 11 0 00011 */ |
#define IP6OPT_TUNNEL_LIMIT 0x04 /* 00 0 00100 */ |
#define IP6OPT_RTALERT 0x05 /* 00 0 00101 (KAME definition) */ |
#define IP6OPT_RTALERT_LEN 4 |
#define IP6OPT_RTALERT_MLD 0 /* Datagram contains an MLD message */ |
#define IP6OPT_RTALERT_RSVP 1 /* Datagram contains an RSVP message */ |
#define IP6OPT_RTALERT_ACTNET 2 /* contains an Active Networks msg */ |
#define IP6OPT_MINLEN 2 |
#define IP6OPT_BINDING_UPDATE 0xc6 /* 11 0 00110 */ |
#define IP6OPT_BINDING_ACK 0x07 /* 00 0 00111 */ |
#define IP6OPT_BINDING_REQ 0x08 /* 00 0 01000 */ |
#define IP6OPT_HOME_ADDRESS 0xc9 /* 11 0 01001 */ |
#define IP6OPT_EID 0x8a /* 10 0 01010 */ |
#define IP6OPT_TYPE(o) ((o) & 0xC0) |
#define IP6OPT_TYPE_SKIP 0x00 |
#define IP6OPT_TYPE_DISCARD 0x40 |
#define IP6OPT_TYPE_FORCEICMP 0x80 |
#define IP6OPT_TYPE_ICMP 0xC0 |
#define IP6OPT_MUTABLE 0x20 |
#define IP6OPT_JUMBO_LEN 6 |
/* Routing header */ |
struct ip6_rthdr { |
u_int8_t ip6r_nxt; /* next header */ |
u_int8_t ip6r_len; /* length in units of 8 octets */ |
u_int8_t ip6r_type; /* routing type */ |
u_int8_t ip6r_segleft; /* segments left */ |
/* followed by routing type specific data */ |
}; |
/* Type 0 Routing header */ |
struct ip6_rthdr0 { |
u_int8_t ip6r0_nxt; /* next header */ |
u_int8_t ip6r0_len; /* length in units of 8 octets */ |
u_int8_t ip6r0_type; /* always zero */ |
u_int8_t ip6r0_segleft; /* segments left */ |
u_int8_t ip6r0_reserved; /* reserved field */ |
u_int8_t ip6r0_slmap[3]; /* strict/loose bit map */ |
struct in6_addr ip6r0_addr[1]; /* up to 23 addresses */ |
}; |
/* Fragment header */ |
struct ip6_frag { |
u_int8_t ip6f_nxt; /* next header */ |
u_int8_t ip6f_reserved; /* reserved field */ |
u_int16_t ip6f_offlg; /* offset, reserved, and flag */ |
u_int32_t ip6f_ident; /* identification */ |
}; |
#include <sys/packoff.h> |
#if BYTE_ORDER == BIG_ENDIAN |
#define IP6F_OFF_MASK 0xfff8 /* mask out offset from _offlg */ |
#define IP6F_RESERVED_MASK 0x0006 /* reserved bits in ip6f_offlg */ |
#define IP6F_MORE_FRAG 0x0001 /* more-fragments flag */ |
#else /* BYTE_ORDER == LITTLE_ENDIAN */ |
#define IP6F_OFF_MASK 0xf8ff /* mask out offset from _offlg */ |
#define IP6F_RESERVED_MASK 0x0600 /* reserved bits in ip6f_offlg */ |
#define IP6F_MORE_FRAG 0x0100 /* more-fragments flag */ |
#endif /* BYTE_ORDER == LITTLE_ENDIAN */ |
/* |
* Internet implementation parameters. |
*/ |
#define IPV6_MAXHLIM 255 /* maximun hoplimit */ |
#define IPV6_DEFHLIM 64 /* default hlim */ |
#define IPV6_FRAGTTL 120 /* ttl for fragment packets, in slowtimo tick */ |
#define IPV6_HLIMDEC 1 /* subtracted when forwaeding */ |
#define IPV6_MMTU 1280 /* minimal MTU and reassembly. 1024 + 256 */ |
#define IPV6_MAXPACKET 65535 /* ip6 max packet size without Jumbo payload*/ |
#ifdef _KERNEL |
/* |
* IP6_EXTHDR_CHECK ensures that region between the IP6 header and the |
* target header (including IPv6 itself, extension headers and |
* TCP/UDP/ICMP6 headers) are continuous. KAME requires drivers |
* to store incoming data into one internal mbuf or one or more external |
* mbufs(never into two or more internal mbufs). Thus, the third case is |
* supposed to never be matched but is prepared just in case. |
*/ |
#define IP6_EXTHDR_CHECK(m, off, hlen, ret) \ |
do { \ |
if ((m)->m_next != NULL) { \ |
if (((m)->m_flags & M_LOOP) && \ |
((m)->m_len < (off) + (hlen)) && \ |
(((m) = m_pullup((m), (off) + (hlen))) == NULL)) { \ |
ip6stat.ip6s_exthdrtoolong++; \ |
return ret; \ |
} else if ((m)->m_flags & M_EXT) { \ |
if ((m)->m_len < (off) + (hlen)) { \ |
ip6stat.ip6s_exthdrtoolong++; \ |
m_freem(m); \ |
return ret; \ |
} \ |
} else { \ |
if ((m)->m_len < (off) + (hlen)) { \ |
ip6stat.ip6s_exthdrtoolong++; \ |
m_freem(m); \ |
return ret; \ |
} \ |
} \ |
} else { \ |
if ((m)->m_len < (off) + (hlen)) { \ |
ip6stat.ip6s_tooshort++; \ |
in6_ifstat_inc(m->m_pkthdr.rcvif, ifs6_in_truncated); \ |
m_freem(m); \ |
return ret; \ |
} \ |
} \ |
} while (0) |
/* |
* IP6_EXTHDR_GET ensures that intermediate protocol header (from "off" to |
* "len") is located in single mbuf, on contiguous memory region. |
* The pointer to the region will be returned to pointer variable "val", |
* with type "typ". |
* IP6_EXTHDR_GET0 does the same, except that it aligns the structure at the |
* very top of mbuf. GET0 is likely to make memory copy than GET. |
* |
* XXX we're now testing this, needs m_pulldown() |
*/ |
#define IP6_EXTHDR_GET(val, typ, m, off, len) \ |
do { \ |
struct mbuf *t; \ |
int tmp; \ |
if ((m)->m_len >= (off) + (len)) \ |
(val) = (typ)(mtod((m), caddr_t) + (off)); \ |
else { \ |
t = m_pulldown((m), (off), (len), &tmp); \ |
if (t) { \ |
if (t->m_len < tmp + (len)) \ |
panic("m_pulldown malfunction"); \ |
(val) = (typ)(mtod(t, caddr_t) + tmp); \ |
} else { \ |
(val) = (typ)NULL; \ |
(m) = NULL; \ |
} \ |
} \ |
} while (0) |
#define IP6_EXTHDR_GET0(val, typ, m, off, len) \ |
do { \ |
struct mbuf *t; \ |
if ((off) == 0) \ |
(val) = (typ)mtod(m, caddr_t); \ |
else { \ |
t = m_pulldown((m), (off), (len), NULL); \ |
if (t) { \ |
if (t->m_len < (len)) \ |
panic("m_pulldown malfunction"); \ |
(val) = (typ)mtod(t, caddr_t); \ |
} else { \ |
(val) = (typ)NULL; \ |
(m) = NULL; \ |
} \ |
} \ |
} while (0) |
#endif /*_KERNEL*/ |
#endif /* not _NETINET_IP6_H_ */ |
/pkgnet/tags/20220214/watt32/inc/netinet/ip_fw.h |
---|
0,0 → 1,123 |
/*!\file netinet/ip_fw.h |
* IP firewall definitions. |
*/ |
/* |
* Copyright (c) 1993 Daniel Boulet |
* Copyright (c) 1994 Ugen J.S.Antsilevich |
* |
* Redistribution and use in source forms, with and without modification, |
* are permitted provided that this entire comment appears intact. |
* |
* Redistribution in binary form may occur without any restrictions. |
* Obviously, it would be nice if you gave credit where credit is due |
* but requiring it would be too onerous. |
* |
* This software is provided ``AS IS'' without any warranties of any kind. |
* |
* $Id: ip_fw.h,v 1.23.2.1 1997/01/29 13:15:43 adam Exp $ |
*/ |
/* |
* Format of an IP firewall descriptor |
* |
* fw_src, fw_dst, fw_smsk, fw_dmsk are always stored in network byte order. |
* fw_flg and fw_n*p are stored in host byte order (of course). |
* Port numbers are stored in HOST byte order. |
*/ |
#ifndef __NETINET_IP_FW_H |
#define __NETINET_IP_FW_H |
struct ip_fw { |
u_long fw_pcnt,fw_bcnt; /* Packet and byte counters */ |
struct in_addr fw_src, fw_dst; /* Source and destination IP addr */ |
struct in_addr fw_smsk, fw_dmsk; /* Mask for src and dest IP addr */ |
union { |
struct in_addr fu_via_ip; /* Specified by IP address */ |
struct { /* Specified by interface name */ |
#define FW_IFNLEN 6 /* To keep structure on 2^x boundary */ |
char fu_via_name[FW_IFNLEN]; |
short fu_via_unit; |
} fu_via_if; |
} fu_via_un; |
#define fw_via_ip fu_via_un.fu_via_ip |
#define fw_via_name fu_via_un.fu_via_if.fu_via_name |
#define fw_via_unit fu_via_un.fu_via_if.fu_via_unit |
u_short fw_number; |
u_short fw_flg; /* Flags word */ |
u_short fw_nsp, fw_ndp; /* N'of src ports and # of dst ports */ |
/* in ports array (dst ports follow */ |
/* src ports; max of 10 ports in all; */ |
/* count of 0 means match all ports) */ |
#define IP_FW_MAX_PORTS 10 /* A reasonable maximum */ |
u_short fw_pts[IP_FW_MAX_PORTS]; /* Array of port numbers to match */ |
u_char fw_ipopt,fw_ipnopt; /* IP options set/unset */ |
u_char fw_tcpf,fw_tcpnf; /* TCP flags set/unset */ |
#define IP_FW_ICMPTYPES_DIM (256 / (sizeof(unsigned) * 8)) |
unsigned fw_icmptypes[IP_FW_ICMPTYPES_DIM]; /* ICMP types bitmap */ |
long timestamp; /* timestamp (tv_sec) of last match */ |
u_short fw_divert_port; /* Divert port (options IPDIVERT) */ |
u_char fw_prot; /* IP protocol */ |
}; |
struct ip_fw_chain { |
LIST_ENTRY(ip_fw_chain) chain; |
struct ip_fw *rule; |
}; |
/* |
* Values for "flags" field . |
*/ |
#define IP_FW_F_INVSRC 0x0001 /* Invert sense of src check */ |
#define IP_FW_F_INVDST 0x0002 /* Invert sense of dst check */ |
#define IP_FW_F_IN 0x0004 /* Inbound */ |
#define IP_FW_F_OUT 0x0008 /* Outbound */ |
#define IP_FW_F_COMMAND 0x0030 /* Mask for type of chain entry: */ |
#define IP_FW_F_ACCEPT 0x0010 /* This is an accept rule */ |
#define IP_FW_F_COUNT 0x0020 /* This is a count rule */ |
#define IP_FW_F_DIVERT 0x0030 /* This is a divert rule */ |
#define IP_FW_F_DENY 0x0000 /* This is a deny rule */ |
#define IP_FW_F_PRN 0x0040 /* Print if this rule matches */ |
#define IP_FW_F_ICMPRPL 0x0080 /* Send back icmp unreachable packet */ |
#define IP_FW_F_SRNG 0x0100 /* The first two src ports are a min * |
* and max range (stored in host byte * |
* order). */ |
#define IP_FW_F_DRNG 0x0200 /* The first two dst ports are a min * |
* and max range (stored in host byte * |
* order). */ |
#define IP_FW_F_IFNAME 0x0400 /* Use interface name/unit (not IP) */ |
#define IP_FW_F_FRAG 0x0800 /* Fragment */ |
#define IP_FW_F_ICMPBIT 0x1000 /* ICMP type bitmap is valid */ |
#define IP_FW_F_IFUWILD 0x2000 /* Match all interface units */ |
#define IP_FW_F_MASK 0x3FFF /* All possible flag bits mask */ |
/* |
* Definitions for IP option names. |
*/ |
#define IP_FW_IPOPT_LSRR 0x01 |
#define IP_FW_IPOPT_SSRR 0x02 |
#define IP_FW_IPOPT_RR 0x04 |
#define IP_FW_IPOPT_TS 0x08 |
/* |
* Definitions for TCP flags. |
*/ |
#define IP_FW_TCPF_FIN TH_FIN |
#define IP_FW_TCPF_SYN TH_SYN |
#define IP_FW_TCPF_RST TH_RST |
#define IP_FW_TCPF_PSH TH_PUSH |
#define IP_FW_TCPF_ACK TH_ACK |
#define IP_FW_TCPF_URG TH_URG |
#define IP_FW_TCPF_ESTAB 0x40 |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/ip_icmp.h |
---|
0,0 → 1,195 |
/*!\file netinet/ip_icmp.h |
* ICMP definitions. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)ip_icmp.h 8.1 (Berkeley) 6/10/93 |
* $Id: ip_icmp.h,v 1.9 1996/08/20 23:11:30 fenner Exp $ |
*/ |
#ifndef __NETINET_IP_ICMP_H |
#define __NETINET_IP_ICMP_H |
#include <sys/packon.h> |
/* |
* Interface Control Message Protocol Definitions. |
* Per RFC 792, September 1981. |
*/ |
/* |
* Internal of an ICMP Router Advertisement |
*/ |
struct icmp_ra_addr { |
u_int32_t ira_addr; |
u_int32_t ira_preference; |
}; |
/* |
* Structure of an icmp header. |
*/ |
struct icmp { |
u_char icmp_type; /* type of message, see below */ |
u_char icmp_code; /* type sub code */ |
u_short icmp_cksum; /* ones complement cksum of struct */ |
union { |
u_char ih_pptr; /* ICMP_PARAMPROB */ |
struct in_addr ih_gwaddr; /* ICMP_REDIRECT */ |
struct ih_idseq { |
n_short icd_id; |
n_short icd_seq; |
} ih_idseq; |
u_int32_t ih_void; /* was 'int' */ |
/* ICMP_UNREACH_NEEDFRAG -- Path MTU Discovery (RFC1191) */ |
struct ih_pmtu { |
n_short ipm_void; |
n_short ipm_nextmtu; |
} ih_pmtu; |
struct ih_rtradv { |
u_char irt_num_addrs; |
u_char irt_wpa; |
u_int16_t irt_lifetime; |
} ih_rtradv; |
} icmp_hun; |
#define icmp_pptr icmp_hun.ih_pptr |
#define icmp_gwaddr icmp_hun.ih_gwaddr |
#define icmp_id icmp_hun.ih_idseq.icd_id |
#define icmp_seq icmp_hun.ih_idseq.icd_seq |
#define icmp_void icmp_hun.ih_void |
#define icmp_pmvoid icmp_hun.ih_pmtu.ipm_void |
#define icmp_nextmtu icmp_hun.ih_pmtu.ipm_nextmtu |
#define icmp_num_addrs icmp_hun.ih_rtradv.irt_num_addrs |
#define icmp_wpa icmp_hun.ih_rtradv.irt_wpa |
#define icmp_lifetime icmp_hun.ih_rtradv.irt_lifetime |
union { |
struct id_ts { |
n_time its_otime; |
n_time its_rtime; |
n_time its_ttime; |
} id_ts; |
struct id_ip { |
struct ip idi_ip; |
/* options and then 64 bits of data */ |
} id_ip; |
struct icmp_ra_addr id_radv; |
u_long id_mask; |
char id_data[1]; |
} icmp_dun; |
#define icmp_otime icmp_dun.id_ts.its_otime |
#define icmp_rtime icmp_dun.id_ts.its_rtime |
#define icmp_ttime icmp_dun.id_ts.its_ttime |
#define icmp_ip icmp_dun.id_ip.idi_ip |
#define icmp_radv icmp_dun.id_radv |
#define icmp_mask icmp_dun.id_mask |
#define icmp_data icmp_dun.id_data |
}; |
#include <sys/packoff.h> |
/* |
* Lower bounds on packet lengths for various types. |
* For the error advice packets must first insure that the |
* packet is large enough to contain the returned ip header. |
* Only then can we do the check to see if 64 bits of packet |
* data have been returned, since we need to check the returned |
* ip header length. |
*/ |
#define ICMP_MINLEN 8 /* abs minimum */ |
#define ICMP_TSLEN (8 + 3 * sizeof (n_time)) /* timestamp */ |
#define ICMP_MASKLEN 12 /* address mask */ |
#define ICMP_ADVLENMIN (8 + sizeof (struct ip) + 8) /* min */ |
#ifndef _IP_VHL |
#define ICMP_ADVLEN(p) (8 + ((p)->icmp_ip.ip_hl << 2) + 8) |
/* N.B.: must separately check that ip_hl >= 5 */ |
#else |
#define ICMP_ADVLEN(p) (8 + (IP_VHL_HL((p)->icmp_ip.ip_vhl) << 2) + 8) |
/* N.B.: must separately check that header length >= 5 */ |
#endif |
/* |
* Definition of type and code field values. |
*/ |
#define ICMP_ECHOREPLY 0 /* echo reply */ |
#define ICMP_UNREACH 3 /* dest unreachable, codes: */ |
#define ICMP_UNREACH_NET 0 /* bad net */ |
#define ICMP_UNREACH_HOST 1 /* bad host */ |
#define ICMP_UNREACH_PROTOCOL 2 /* bad protocol */ |
#define ICMP_UNREACH_PORT 3 /* bad port */ |
#define ICMP_UNREACH_NEEDFRAG 4 /* IP_DF caused drop */ |
#define ICMP_UNREACH_SRCFAIL 5 /* src route failed */ |
#define ICMP_UNREACH_NET_UNKNOWN 6 /* unknown net */ |
#define ICMP_UNREACH_HOST_UNKNOWN 7 /* unknown host */ |
#define ICMP_UNREACH_ISOLATED 8 /* src host isolated */ |
#define ICMP_UNREACH_NET_PROHIB 9 /* prohibited access */ |
#define ICMP_UNREACH_HOST_PROHIB 10 /* ditto */ |
#define ICMP_UNREACH_TOSNET 11 /* bad tos for net */ |
#define ICMP_UNREACH_TOSHOST 12 /* bad tos for host */ |
#define ICMP_UNREACH_FILTER_PROHIB 13 /* admin prohib */ |
#define ICMP_UNREACH_HOST_PRECEDENCE 14 /* host prec vio. */ |
#define ICMP_UNREACH_PRECEDENCE_CUTOFF 15 /* prec cutoff */ |
#define ICMP_SOURCEQUENCH 4 /* packet lost, slow down */ |
#define ICMP_REDIRECT 5 /* shorter route, codes: */ |
#define ICMP_REDIRECT_NET 0 /* for network */ |
#define ICMP_REDIRECT_HOST 1 /* for host */ |
#define ICMP_REDIRECT_TOSNET 2 /* for tos and net */ |
#define ICMP_REDIRECT_TOSHOST 3 /* for tos and host */ |
#define ICMP_ECHO 8 /* echo service */ |
#define ICMP_ROUTERADVERT 9 /* router advertisement */ |
#define ICMP_ROUTERSOLICIT 10 /* router solicitation */ |
#define ICMP_TIMXCEED 11 /* time exceeded, code: */ |
#define ICMP_TIMXCEED_INTRANS 0 /* ttl==0 in transit */ |
#define ICMP_TIMXCEED_REASS 1 /* ttl==0 in reass */ |
#define ICMP_PARAMPROB 12 /* ip header bad */ |
#define ICMP_PARAMPROB_OPTABSENT 1 /* req. opt. absent */ |
#define ICMP_TSTAMP 13 /* timestamp request */ |
#define ICMP_TSTAMPREPLY 14 /* timestamp reply */ |
#define ICMP_IREQ 15 /* information request */ |
#define ICMP_IREQREPLY 16 /* information reply */ |
#define ICMP_MASKREQ 17 /* address mask request */ |
#define ICMP_MASKREPLY 18 /* address mask reply */ |
#ifndef ICMP_MAXTYPE |
#define ICMP_MAXTYPE 18 |
#endif |
#define ICMP_INFOTYPE(type) \ |
((type) == ICMP_ECHOREPLY || (type) == ICMP_ECHO || \ |
(type) == ICMP_ROUTERADVERT || (type) == ICMP_ROUTERSOLICIT || \ |
(type) == ICMP_TSTAMP || (type) == ICMP_TSTAMPREPLY || \ |
(type) == ICMP_IREQ || (type) == ICMP_IREQREPLY || \ |
(type) == ICMP_MASKREQ || (type) == ICMP_MASKREPLY) |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/ip_mrout.h |
---|
0,0 → 1,253 |
/*!\file netinet/ip_mrout.h |
* IP multicast forwarding. |
*/ |
/* |
* Copyright (c) 1989 Stephen Deering. |
* Copyright (c) 1992, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* This code is derived from software contributed to Berkeley by |
* Stephen Deering of Stanford University. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)ip_mroute.h 8.1 (Berkeley) 6/10/93 |
* $Id: ip_mroute.h,v 1.10.4.1 1997/02/22 19:47:28 joerg Exp $ |
*/ |
#ifndef __NETINET_IP_MROUTE_H |
#define __NETINET_IP_MROUTE_H |
/* |
* Definitions for IP multicast forwarding. |
* |
* Written by David Waitzman, BBN Labs, August 1988. |
* Modified by Steve Deering, Stanford, February 1989. |
* Modified by Ajit Thyagarajan, PARC, August 1993. |
* Modified by Ajit Thyagarajan, PARC, August 1994. |
* |
* MROUTING Revision: 3.3.1.3 |
*/ |
/* |
* Multicast Routing set/getsockopt commands. |
*/ |
#define MRT_INIT 100 /* initialize forwarder */ |
#define MRT_DONE 101 /* shut down forwarder */ |
#define MRT_ADD_VIF 102 /* create virtual interface */ |
#define MRT_DEL_VIF 103 /* delete virtual interface */ |
#define MRT_ADD_MFC 104 /* insert forwarding cache entry */ |
#define MRT_DEL_MFC 105 /* delete forwarding cache entry */ |
#define MRT_VERSION 106 /* get kernel version number */ |
#define MRT_ASSERT 107 /* enable PIM assert processing */ |
#define GET_TIME(t) microtime(&t) |
/* |
* Types and macros for handling bitmaps with one bit per virtual interface. |
*/ |
#define MAXVIFS 32 |
typedef u_long vifbitmap_t; |
typedef u_short vifi_t; /* type of a vif index */ |
#define ALL_VIFS (vifi_t)-1 |
#define VIFM_SET(n, m) ((m) |= (1 << (n))) |
#define VIFM_CLR(n, m) ((m) &= ~(1 << (n))) |
#define VIFM_ISSET(n, m) ((m) & (1 << (n))) |
#define VIFM_CLRALL(m) ((m) = 0x00000000) |
#define VIFM_COPY(mfrom, mto) ((mto) = (mfrom)) |
#define VIFM_SAME(m1, m2) ((m1) == (m2)) |
/* |
* Argument structure for MRT_ADD_VIF. |
* (MRT_DEL_VIF takes a single vifi_t argument.) |
*/ |
struct vifctl { |
vifi_t vifc_vifi; /* the index of the vif to be added */ |
u_char vifc_flags; /* VIFF_ flags defined below */ |
u_char vifc_threshold; /* min ttl required to forward on vif */ |
u_int vifc_rate_limit; /* max rate */ |
struct in_addr vifc_lcl_addr; /* local interface address */ |
struct in_addr vifc_rmt_addr; /* remote address (tunnels only) */ |
}; |
#define VIFF_TUNNEL 0x1 /* vif represents a tunnel end-point */ |
#define VIFF_SRCRT 0x2 /* tunnel uses IP source routing */ |
/* |
* Argument structure for MRT_ADD_MFC and MRT_DEL_MFC |
* (mfcc_tos to be added at a future point) |
*/ |
struct mfcctl { |
struct in_addr mfcc_origin; /* ip origin of mcasts */ |
struct in_addr mfcc_mcastgrp; /* multicast group associated*/ |
vifi_t mfcc_parent; /* incoming vif */ |
u_char mfcc_ttls[MAXVIFS]; /* forwarding ttls on vifs */ |
}; |
/* |
* The kernel's multicast routing statistics. |
*/ |
struct mrtstat { |
u_long mrts_mfc_lookups; /* # forw. cache hash table hits */ |
u_long mrts_mfc_misses; /* # forw. cache hash table misses */ |
u_long mrts_upcalls; /* # calls to mrouted */ |
u_long mrts_no_route; /* no route for packet's origin */ |
u_long mrts_bad_tunnel; /* malformed tunnel options */ |
u_long mrts_cant_tunnel; /* no room for tunnel options */ |
u_long mrts_wrong_if; /* arrived on wrong interface */ |
u_long mrts_upq_ovflw; /* upcall Q overflow */ |
u_long mrts_cache_cleanups; /* # entries with no upcalls */ |
u_long mrts_drop_sel; /* pkts dropped selectively */ |
u_long mrts_q_overflow; /* pkts dropped - Q overflow */ |
u_long mrts_pkt2large; /* pkts dropped - size > BKT SIZE */ |
u_long mrts_upq_sockfull; /* upcalls dropped - socket full */ |
}; |
/* |
* Argument structure used by mrouted to get src-grp pkt counts |
*/ |
struct sioc_sg_req { |
struct in_addr src; |
struct in_addr grp; |
u_long pktcnt; |
u_long bytecnt; |
u_long wrong_if; |
}; |
/* |
* Argument structure used by mrouted to get vif pkt counts |
*/ |
struct sioc_vif_req { |
vifi_t vifi; /* vif number */ |
u_long icount; /* Input packet count on vif */ |
u_long ocount; /* Output packet count on vif */ |
u_long ibytes; /* Input byte count on vif */ |
u_long obytes; /* Output byte count on vif */ |
}; |
/* |
* The kernel's virtual-interface structure. |
*/ |
struct vif { |
u_char v_flags; /* VIFF_ flags defined above */ |
u_char v_threshold; /* min ttl required to forward on vif*/ |
u_int v_rate_limit; /* max rate */ |
struct tbf *v_tbf; /* token bucket structure at intf. */ |
struct in_addr v_lcl_addr; /* local interface address */ |
struct in_addr v_rmt_addr; /* remote address (tunnels only) */ |
struct ifnet *v_ifp; /* pointer to interface */ |
u_long v_pkt_in; /* # pkts in on interface */ |
u_long v_pkt_out; /* # pkts out on interface */ |
u_long v_bytes_in; /* # bytes in on interface */ |
u_long v_bytes_out; /* # bytes out on interface */ |
struct route v_route; /* cached route if this is a tunnel */ |
u_int v_rsvp_on; /* RSVP listening on this vif */ |
struct socket *v_rsvpd; /* RSVP daemon socket */ |
}; |
/* |
* The kernel's multicast forwarding cache entry structure |
* (A field for the type of service (mfc_tos) is to be added |
* at a future point) |
*/ |
struct mfc { |
struct in_addr mfc_origin; /* IP origin of mcasts */ |
struct in_addr mfc_mcastgrp; /* multicast group associated*/ |
vifi_t mfc_parent; /* incoming vif */ |
u_char mfc_ttls[MAXVIFS]; /* forwarding ttls on vifs */ |
u_long mfc_pkt_cnt; /* pkt count for src-grp */ |
u_long mfc_byte_cnt; /* byte count for src-grp */ |
u_long mfc_wrong_if; /* wrong if for src-grp */ |
int mfc_expire; /* time to clean entry up */ |
struct timeval mfc_last_assert; /* last time I sent an assert*/ |
}; |
/* |
* Struct used to communicate from kernel to multicast router |
* note the convenient similarity to an IP packet |
*/ |
struct igmpmsg { |
u_long unused1; |
u_long unused2; |
u_char im_msgtype; /* what type of message */ |
#define IGMPMSG_NOCACHE 1 |
#define IGMPMSG_WRONGVIF 2 |
u_char im_mbz; /* must be zero */ |
u_char im_vif; /* vif rec'd on */ |
u_char unused3; |
struct in_addr im_src, im_dst; |
}; |
/* |
* Argument structure used for pkt info. while upcall is made |
*/ |
struct rtdetq { |
struct mbuf *m; /* A copy of the packet */ |
struct ifnet *ifp; /* Interface pkt came in on */ |
vifi_t xmt_vif; /* Saved copy of imo_multicast_vif */ |
#ifdef UPCALL_TIMING |
struct timeval t; /* Timestamp */ |
#endif |
}; |
#define MFCTBLSIZ 256 |
#if (MFCTBLSIZ & (MFCTBLSIZ - 1)) == 0 /* from sys:route.h */ |
#define MFCHASHMOD(h) ((h) & (MFCTBLSIZ - 1)) |
#else |
#define MFCHASHMOD(h) ((h) % MFCTBLSIZ) |
#endif |
#define MAX_UPQ 4 /* max. no of pkts in upcall Q */ |
/* |
* Token Bucket filter code |
*/ |
#define MAX_BKT_SIZE 10000 /* 10K bytes size */ |
#define MAXQSIZE 10 /* max # of pkts in queue */ |
/* |
* the token bucket filter at each vif |
*/ |
struct tbf |
{ |
struct timeval tbf_last_pkt_t; /* arr. time of last pkt */ |
u_long tbf_n_tok; /* no of tokens in bucket */ |
u_long tbf_q_len; /* length of queue at this vif */ |
u_long tbf_max_q_len; /* max. queue length */ |
struct mbuf *tbf_q; /* Packet queue */ |
struct mbuf *tbf_t; /* tail-insertion pointer */ |
}; |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/ip_var.h |
---|
0,0 → 1,164 |
/*!\file netinet/ip_var.h |
* Internal IP definitions and statistics. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)ip_var.h 8.2 (Berkeley) 1/9/95 |
* $Id: ip_var.h,v 1.24.2.2 1996/11/12 11:28:59 phk Exp $ |
*/ |
#ifndef __NETINET_IP_VAR_H |
#define __NETINET_IP_VAR_H |
#include <sys/packon.h> |
#if defined(__TURBOC__) || defined(__BORLANDC__) |
#pragma warn -bbf- /* "Bitfields must be signed or unsigned int" warning */ |
#endif |
/* |
* Overlay for ip header used by other protocols (tcp, udp). |
*/ |
struct ipovly { |
caddr_t ih_next, ih_prev; /* for protocol sequence q's */ |
u_char ih_x1; /* (unused) */ |
u_char ih_pr; /* protocol */ |
u_short ih_len; /* protocol length */ |
struct in_addr ih_src; /* source internet address */ |
struct in_addr ih_dst; /* destination internet address */ |
}; |
/* |
* Ip header, when holding a fragment. |
* |
* Note: ipf_next must be at same offset as ipq_next above |
*/ |
struct ipasfrag { |
u_char ip_hl:4; |
u_char ip_v:4; |
u_char ipf_mff; /* XXX overlays ip_tos: use low bit |
* to avoid destroying tos; |
* copied from (ip_off&IP_MF) */ |
u_short ip_len; |
u_short ip_id; |
u_short ip_off; |
u_char ip_ttl; |
u_char ip_p; |
u_short ip_sum; |
struct ipasfrag *ipf_next; /* next fragment */ |
struct ipasfrag *ipf_prev; /* previous fragment */ |
}; |
#include <sys/packoff.h> |
/* |
* Ip reassembly queue structure. Each fragment |
* being reassembled is attached to one of these structures. |
* They are timed out after ipq_ttl drops to 0, and may also |
* be reclaimed if memory becomes tight. |
*/ |
struct ipq { |
struct ipq *next,*prev; /* to other reass headers */ |
u_char ipq_ttl; /* time for reass q to live */ |
u_char ipq_p; /* protocol of this fragment */ |
u_short ipq_id; /* sequence id for reassembly */ |
struct ipasfrag *ipq_next,*ipq_prev; |
/* to ip headers of fragments */ |
struct in_addr ipq_src,ipq_dst; |
#ifdef IPDIVERT |
u_short ipq_divert; /* divert protocol port */ |
#endif |
}; |
/* |
* Structure stored in mbuf in inpcb.ip_options |
* and passed to ip_output when ip options are in use. |
* The actual length of the options (including ipopt_dst) |
* is in m_len. |
*/ |
#define MAX_IPOPTLEN 40 |
struct ipoption { |
struct in_addr ipopt_dst; /* first-hop dst if source routed */ |
char ipopt_list[MAX_IPOPTLEN]; /* options proper */ |
}; |
/* |
* Structure attached to inpcb.ip_moptions and |
* passed to ip_output when IP multicast options are in use. |
*/ |
struct ip_moptions { |
struct ifnet *imo_multicast_ifp; /* ifp for outgoing multicasts */ |
u_char imo_multicast_ttl; /* TTL for outgoing multicasts */ |
u_char imo_multicast_loop; /* 1 => hear sends if a member */ |
u_short imo_num_memberships; /* no. memberships this socket */ |
struct in_multi *imo_membership[IP_MAX_MEMBERSHIPS]; |
u_long imo_multicast_vif; /* vif num outgoing multicasts */ |
}; |
struct ipstat { |
u_long ips_total; /* total packets received */ |
u_long ips_badsum; /* checksum bad */ |
u_long ips_tooshort; /* packet too short */ |
u_long ips_toosmall; /* not enough data */ |
u_long ips_badhlen; /* ip header length < data size */ |
u_long ips_badlen; /* ip length < ip header length */ |
u_long ips_fragments; /* fragments received */ |
u_long ips_fragdropped; /* frags dropped (dups, out of space) */ |
u_long ips_fragtimeout; /* fragments timed out */ |
u_long ips_forward; /* packets forwarded */ |
u_long ips_cantforward; /* packets rcvd for unreachable dest */ |
u_long ips_redirectsent; /* packets forwarded on same net */ |
u_long ips_noproto; /* unknown or unsupported protocol */ |
u_long ips_delivered; /* datagrams delivered to upper level*/ |
u_long ips_localout; /* total ip packets generated here */ |
u_long ips_odropped; /* lost out packets due to nobufs, etc. */ |
u_long ips_idropped; /*!! new, lost in packets due to nobufs, etc. */ |
u_long ips_reassembled; /* total packets reassembled ok */ |
u_long ips_fragmented; /* datagrams successfully fragmented */ |
u_long ips_ofragments; /* output fragments created */ |
u_long ips_cantfrag; /* don't fragment flag was set, etc. */ |
u_long ips_badoptions; /* error in option processing */ |
u_long ips_noroute; /* packets discarded due to no route */ |
u_long ips_badvers; /* ip version != 4 */ |
u_long ips_rawout; /* total raw ip packets generated */ |
u_long ips_toolong; /* ip length > max ip packet size */ |
}; |
#if defined(__TURBOC__) || defined(__BORLANDC__) |
#pragma warn -bbf. |
#endif |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/ipv6.h |
---|
0,0 → 1,175 |
/*!\file netinet/ipv6.h |
* Linux IPv6 definitions. |
*/ |
/* |
* Linux INET6 implementation |
* |
* Authors: |
* Pedro Roque <roque@di.fc.ul.pt> |
* |
* $Id: ipv6.h,v 1.6 1997/04/01 02:22:58 davem Exp $ |
* |
* This program is free software; you can redistribute it and/or |
* modify it under the terms of the GNU General Public License |
* as published by the Free Software Foundation; either version |
* 2 of the License, or (at your option) any later version. |
* |
* NB! Don't ue this file. Use <netinet/in.h> instread. |
*/ |
#ifndef _NET_IPV6_H |
#define _NET_IPV6_H |
#ifndef __NETINET_IN_H |
#include <netinet/in.h> /* in6_addr */ |
#endif |
/* |
* Advanced API |
* source interface/address selection, source routing, etc... |
* *under construction* |
*/ |
#include <sys/packon.h> |
/* |
* IPv6 fixed header |
*/ |
struct ipv6hdr { |
unsigned char ipv6_priority:4; |
unsigned char ipv6_version:4; |
unsigned char ipv6_flow_lbl[3]; |
unsigned short ipv6_len; |
unsigned char ipv6_nextheader; |
unsigned char ipv6_hoplimit; |
struct in6_addr ipv6_src; |
struct in6_addr ipv6_dst; |
}; |
/* |
* The length of this struct cannot be greater than the length of |
* the proto_priv field in a sk_buff which is currently |
* defined to be 16 bytes. |
* Pointers take upto 8 bytes (sizeof(void *) is 8 on the alpha). |
*/ |
struct ipv6_options { |
/* length of extension headers */ |
unsigned short opt_flen; /* after fragment hdr */ |
unsigned short opt_nflen; /* before fragment hdr */ |
/* |
* protocol options |
* usualy carried in IPv6 extension headers |
*/ |
struct ipv6_rt_hdr *srcrt; /* Routing Header */ |
}; |
struct in6_pktinfo { |
struct in6_addr ipi6_addr; |
int ipi6_ifindex; |
}; |
struct in6_ifreq { |
struct in6_addr ifr6_addr; |
unsigned long ifr6_prefixlen; |
unsigned long ifr6_ifindex; |
}; |
#define IPV6_SRCRT_STRICT 0x01 /* this hop must be a neighbor */ |
#define IPV6_SRCRT_TYPE_0 0 /* IPv6 type 0 Routing Header */ |
/* |
* routing header |
*/ |
struct ipv6_rt_hdr { |
unsigned char nexthdr; |
unsigned char hdrlen; |
unsigned char type; |
unsigned char segments_left; |
/* |
* type specific data |
* variable length field |
*/ |
}; |
/* |
* routing header type 0 (used in cmsghdr struct) |
*/ |
struct ipv6_rt0_hdr { |
struct ipv6_rt_hdr rt_hdr; |
unsigned long bitmap; /* strict/loose bit map */ |
#ifndef __WATCOMC__ |
struct in6_addr addr[0]; |
#endif |
#define rt0_type rt_hdr.type; |
}; |
/* |
* NextHeader field of IPv6 header |
*/ |
#define NEXTHDR_HOP 0 /* Hop-by-hop option header. */ |
#define NEXTHDR_TCP 6 /* TCP segment. */ |
#define NEXTHDR_UDP 17 /* UDP message. */ |
#define NEXTHDR_IPV6 41 /* IPv6 in IPv6 */ |
#define NEXTHDR_ROUTING 43 /* Routing header. */ |
#define NEXTHDR_FRAGMENT 44 /* Fragmentation/reassembly header. */ |
#define NEXTHDR_ESP 50 /* Encapsulating security payload. */ |
#define NEXTHDR_AUTH 51 /* Authentication header. */ |
#define NEXTHDR_ICMP 58 /* ICMP for IPv6. */ |
#define NEXTHDR_NONE 59 /* No next header */ |
#define NEXTHDR_DEST 60 /* Destination options header. */ |
#define NEXTHDR_MAX 255 |
#define IPV6_DEFAULT_HOPLIMIT 64 |
#define IPV6_DEFAULT_MCASTHOPS 1 |
/* |
* Addr type |
* |
* type - unicast | multicast | anycast |
* scope - local | site | global |
* v4 - compat |
* v4mapped |
* any |
* loopback |
*/ |
#define IPV6_ADDR_ANY 0x0000U |
#define IPV6_ADDR_UNICAST 0x0001U |
#define IPV6_ADDR_MULTICAST 0x0002U |
#define IPV6_ADDR_ANYCAST 0x0004U |
#define IPV6_ADDR_LOOPBACK 0x0010U |
#define IPV6_ADDR_LINKLOCAL 0x0020U |
#define IPV6_ADDR_SITELOCAL 0x0040U |
#define IPV6_ADDR_COMPATv4 0x0080U |
#define IPV6_ADDR_SCOPE_MASK 0x00f0U |
#define IPV6_ADDR_MAPPED 0x1000U |
#define IPV6_ADDR_RESERVED 0x2000U /* reserved address space */ |
/* |
* fragmentation header |
*/ |
struct ipv6_fraghdr { |
unsigned char nexthdr; |
unsigned char reserved; |
unsigned short frag_off; |
unsigned long identification; |
}; |
#define fraghdr ipv6_fraghdr |
#include <sys/packoff.h> |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp.h |
---|
0,0 → 1,138 |
/*!\file netinet/tcp.h |
* TCP header and options. |
*/ |
/* $NetBSD: tcp.h,v 1.8 1995/04/17 05:32:58 cgd Exp $ */ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcp.h 8.1 (Berkeley) 6/10/93 |
*/ |
#ifndef __NETINET_TCP_H |
#define __NETINET_TCP_H |
typedef u_long tcp_seq; |
typedef u_long tcp_cc; /* connection count per rfc1644 */ |
#include <sys/packon.h> |
/* |
* TCP header. |
* Per RFC 793, September, 1981. |
*/ |
struct tcphdr { |
u_short th_sport; /* source port */ |
u_short th_dport; /* destination port */ |
tcp_seq th_seq; /* sequence number */ |
tcp_seq th_ack; /* acknowledgement number */ |
u_char th_x2:4; /* (unused) */ |
u_char th_off:4; /* data offset */ |
u_char th_flags; |
#define TH_FIN 0x01 |
#define TH_SYN 0x02 |
#define TH_RST 0x04 |
#define TH_PUSH 0x08 |
#define TH_ACK 0x10 |
#define TH_URG 0x20 |
#define TH_FLAGS (TH_FIN|TH_SYN|TH_RST|TH_ACK|TH_URG) |
u_short th_win; /* window */ |
u_short th_sum; /* checksum */ |
u_short th_urp; /* urgent pointer */ |
}; |
#include <sys/packoff.h> |
#define TCPOPT_EOL 0 |
#define TCPOPT_NOP 1 |
#define TCPOPT_MAXSEG 2 |
#define TCPOLEN_MAXSEG 4 |
#define TCPOPT_WINDOW 3 |
#define TCPOLEN_WINDOW 3 |
#define TCPOPT_SACK_PERMITTED 4 |
#define TCPOLEN_SACK_PERMITTED 2 |
#define TCPOPT_SACK 5 |
#define TCPOPT_TIMESTAMP 8 |
#define TCPOLEN_TIMESTAMP 10 |
#define TCPOLEN_TSTAMP_APPA (TCPOLEN_TIMESTAMP+2) /* appendix A */ |
#define TCPOPT_TSTAMP_HDR \ |
(TCPOPT_NOP<<24|TCPOPT_NOP<<16|TCPOPT_TIMESTAMP<<8|TCPOLEN_TIMESTAMP) |
#define TCPOPT_CC 11 /* CC options: RFC-1644 */ |
#define TCPOPT_CCNEW 12 |
#define TCPOPT_CCECHO 13 |
#define TCPOLEN_CC 6 |
#define TCPOLEN_CC_APPA (TCPOLEN_CC+2) |
#define TCPOPT_CC_HDR(ccopt) \ |
(TCPOPT_NOP<<24|TCPOPT_NOP<<16|(ccopt)<<8|TCPOLEN_CC) |
#define TCPOPT_SIGNATURE 19 |
#define TCP_SIGLEN 16 |
/* |
* Default maximum segment size for TCP. |
* With an IP MSS of 576, this is 536, |
* but 512 is probably more convenient. |
* This should be defined as MIN(512, IP_MSS - sizeof (struct tcpiphdr)). |
*/ |
#define TCP_MSS 512 |
#define TCP_MAXWIN 65535 /* largest value for (unscaled) window */ |
#define TTCP_CLIENT_SND_WND 4096 /* dflt send window for T/TCP client */ |
#define TCP_MAX_WINSHIFT 14 /* maximum window shift */ |
#define TCP_MAXHLEN (0xf<<2) /* max length of header in bytes */ |
#define TCP_MAXOLEN (TCP_MAXHLEN - sizeof(struct tcphdr)) |
/* max space left for options */ |
/* |
* User-settable options (used with setsockopt). |
*/ |
#define TCP_NODELAY 0x01 /* don't delay send to coalesce packets */ |
#define TCP_MAXSEG 0x02 /* set maximum segment size */ |
#ifdef TCP_AUTO |
#define TCP_AUTO_OP 0x03 /* 0 to disable autotuning, 1 to reenable */ |
#endif |
#define TCP_NOPUSH 0x04 /* don't push last block of write */ |
#define TCP_NOOPT 0x08 /* don't use TCP options */ |
/* For PSC modifications */ |
#if defined(TCP_AUTO) || defined(TCP_SACK) || defined(TCP_FACK) |
#define PSC_VERSION "0.8" |
#endif |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp_debu.h |
---|
0,0 → 1,122 |
/*!\file netinet/tcp_debu.h |
* TCP debugging. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcp_debug.h 8.1 (Berkeley) 6/10/93 |
* $Id: tcp_debug.h,v 1.5 1996/04/13 12:45:57 bde Exp $ |
*/ |
#ifndef __NETINET_TCP_DEBUG_H |
#define __NETINET_TCP_DEBUG_H |
struct tcp_debug { |
n_time td_time; |
short td_act; |
short td_ostate; |
caddr_t td_tcb; |
struct tcpiphdr td_ti; |
short td_req; |
struct tcpcb td_cb; |
}; |
#define TA_INPUT 0 |
#define TA_OUTPUT 1 |
#define TA_USER 2 |
#define TA_RESPOND 3 |
#define TA_DROP 4 |
#ifdef TANAMES |
static char *tanames[] = { |
"input", "output", "user", "respond", "drop" |
}; |
#endif |
#define TCP_NDEBUG 100 |
#ifdef TCP_AUTO_DEBUG |
#include <sys/wtime.h> |
/* The following table is used as a circular buffer in which TCP |
* autotuning statistics can be kept. |
* It is intended that these statistics will be periodically read |
* by a debugging application using kvm. |
*/ |
#define TAD_ENTRIES 1024 /* number of entries in monitor_table */ |
struct tad_entry { |
u_long seq_no; /* tad entry number */ |
struct timeval time; /* time of entry */ |
u_long snd_cwnd; /* congestion window */ |
u_long sb_hiwat; /* send socket buffer hi water mark */ |
u_long sb_target_hiwat; /* target for same */ |
u_long sb_cc; /* space used in send socket buf */ |
u_long m_clused; /* m_clusters - m_clfree */ |
u_short lport; /* local port number */ |
u_short rport; /* remote port number */ |
u_long debug; /* used for debugging */ |
tcp_seq snd_max; /* highest sequence number sent */ |
} tad_table[TAD_ENTRIES]; |
extern struct tad_entry *tad_index; /* insert point */ |
extern u_long tad_seq; |
extern u_long tad_debug; |
/* increment the index into the table |
*/ |
#define TAD_INDEX_INCR tad_index = (struct tad_entry*)((u_long)tad_index + \ |
sizeof(struct tad_entry)); \ |
if ((u_long) tad_index >= \ |
(u_long) &tad_table[TAD_ENTRIES]) \ |
tad_index = tad_table; |
/* add a log entry to the table |
*/ |
#define TAD_SNAPSHOT(tp, so) tad_index->seq_no = tad_seq++; \ |
microtime(&(tad_index->time)); \ |
tad_index->snd_cwnd = tp->snd_cwnd; \ |
tad_index->sb_hiwat = so->so_snd.sb_hiwat; \ |
tad_index->sb_target_hiwat = so->so_snd.sb_net_target; \ |
tad_index->sb_cc = so->so_snd.sb_cc; \ |
tad_index->m_clused = mbstat.m_clusters - mbstat.m_clfree;\ |
tad_index->lport = tp->t_inpcb->inp_lport; \ |
tad_index->rport = tp->t_inpcb->inp_fport; \ |
tad_index->debug = tad_debug; \ |
tad_index->snd_max = tp->snd_max; \ |
TAD_INDEX_INCR; |
#endif /* TCP_AUTO_DEBUG */ |
#endif /* __NETINET_TCP_DEBUG_H */ |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp_fsm.h |
---|
0,0 → 1,96 |
/*!\file netinet/tcp_fsm.h |
* TCP Finite State Machine. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcp_fsm.h 8.1 (Berkeley) 6/10/93 |
* $Id: tcp_fsm.h,v 1.7 1995/11/14 20:34:34 phk Exp $ |
*/ |
#ifndef __NETINET_TCP_FSM_H |
#define __NETINET_TCP_FSM_H |
/* |
* TCP FSM state definitions. |
* Per RFC793, September, 1981. |
*/ |
#define TCP_NSTATES 11 |
#define TCPS_CLOSED 0 /* closed */ |
#define TCPS_LISTEN 1 /* listening for connection */ |
#define TCPS_SYN_SENT 2 /* active, have sent syn */ |
#define TCPS_SYN_RECEIVED 3 /* have send and received syn */ |
/* states < TCPS_ESTABLISHED are those where connections not established */ |
#define TCPS_ESTABLISHED 4 /* established */ |
#define TCPS_CLOSE_WAIT 5 /* rcvd fin, waiting for close */ |
/* states > TCPS_CLOSE_WAIT are those where user has closed */ |
#define TCPS_FIN_WAIT_1 6 /* have closed, sent fin */ |
#define TCPS_CLOSING 7 /* closed xchd FIN; await FIN ACK */ |
#define TCPS_LAST_ACK 8 /* had fin and close; await FIN ACK */ |
/* states > TCPS_CLOSE_WAIT && < TCPS_FIN_WAIT_2 await ACK of FIN */ |
#define TCPS_FIN_WAIT_2 9 /* have closed, fin is acked */ |
#define TCPS_TIME_WAIT 10 /* in 2*msl quiet wait after close */ |
#define TCPS_HAVERCVDSYN(s) ((s) >= TCPS_SYN_RECEIVED) |
#define TCPS_HAVEESTABLISHED(s) ((s) >= TCPS_ESTABLISHED) |
#define TCPS_HAVERCVDFIN(s) ((s) >= TCPS_TIME_WAIT) |
#ifdef TCPOUTFLAGS |
/* |
* Flags used when sending segments in tcp_output. |
* Basic flags (TH_RST,TH_ACK,TH_SYN,TH_FIN) are totally |
* determined by state, with the proviso that TH_FIN is sent only |
* if all data queued for output is included in the segment. |
*/ |
static u_char tcp_outflags[TCP_NSTATES] = { |
TH_RST|TH_ACK, 0, TH_SYN, TH_SYN|TH_ACK, |
TH_ACK, TH_ACK, |
TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_FIN|TH_ACK, TH_ACK, TH_ACK, |
}; |
#endif |
#ifdef KPROF |
int tcp_acounts[TCP_NSTATES][PRU_NREQ]; |
#endif |
#ifdef TCPSTATES |
char *tcpstates[] = { |
"CLOSED", "LISTEN", "SYN_SENT", "SYN_RCVD", |
"ESTABLISHED", "CLOSE_WAIT", "FIN_WAIT_1", "CLOSING", |
"LAST_ACK", "FIN_WAIT_2", "TIME_WAIT", |
}; |
#endif |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp_scor.h |
---|
0,0 → 1,108 |
/*!\file netinet/tcp_scor.h |
* TCP scoreboard definitions (SACK). |
*/ |
/* |
* Copyright (c) 1997, Pittsburgh Supercomputing Center, |
* Jamshid Mahdavi, Matt Mathis, Jeffrey Semke |
* All rights reserved. |
* |
* Permission to use, copy, modify, and distribute this software and |
* its documentation for any purpose and without fee is hereby granted, |
* provided that the above copyright notice appear in all copies and |
* that both that copyright notice and this permission notice appear |
* in supporting documentation. |
* |
* This is experimental software under active development and may |
* potentially contain bugs. Use at your own risk. |
* |
*/ |
#ifndef __NETINET_TCP_SCOREBOARD_H |
#define __NETINET_TCP_SCOREBOARD_H |
/********************************************************************** |
* |
* Scoreboard module headers: |
* |
**********************************************************************/ |
/* Initialize the scoreboard |
*/ |
#define scrb_init(tp) { LIST_INIT(&((tp)->scrb.head)); \ |
(tp)->scrb.last_ack=(tp)->snd_una; \ |
(tp)->snd_retran_data = 0; } |
/* |
* Check to see if the scoreboard is empty |
* scrb_isempty(struct tcpcp *tp) |
*/ |
#define scrb_isempty(tp) (! ((tp)->scrb.scrb_head)) |
/* This macro quickly takes care of the common case of an empty |
* scoreboard. Otherwise it called scrb_getnextretran_func to hunt |
* through the scoreboard and return the next block of data to be |
* retransmitted. The start and end of the block are filled in to |
* start_ptr and end_ptr, and the length of the block is returned. A |
* zero return value indicates that there is no data to be |
* retransmitted at this time. Note that end_ptr actually points to |
* the first byte of data which is NOT to be retransmitted (or the |
* first byte following the data to be retransmitted) similar in |
* fashion to the rest of this code. |
* |
* scrb_getnextretran(struct tcpcp *tp, tcp_seq *start, tcp_seq *end) |
*/ |
#define scrb_getnextretran(tp,start,end) \ |
(scrb_isempty(tp) ? \ |
(int)((tcp_seq*)*start = (tcp_seq*)*end = \ |
(tcp_seq*)0) \ |
: scrb_getnextretran_func(tp,start,end)) |
/* sender side -- tracks packets sent that WERE selectively acknowledged |
* by the other end. |
* Each sb_entry represents a hole (missing data) followed by |
* consecutive received data. |
*/ |
struct scrb_entry { |
LIST_ENTRY(scrb_entry) ptrs; /* Next/Prev structure pointers */ |
tcp_seq start; /* Start of received data block */ |
tcp_seq end; /* End of received data block */ |
tcp_seq retran; /* End of subsequent data |
retransmitted */ |
tcp_seq snd_max; /* Value of snd_max at the time of |
retransmission */ |
int sack_cnt; /* FACK ONLY: Number of reports for |
this hole */ |
}; |
#define scrb_next ptrs.le_next /* next element */ |
#define scrb_prev ptrs.le_prev /* previous element */ |
/* sender side -- tracks packets sent that were selectively |
* acknowledged by the other end |
*/ |
struct scoreboard { |
tcp_seq last_ack; /* This value replicates snd_una, |
but is needed for internal |
scoreboard state. */ |
LIST_HEAD(scrb_head_internal, scrb_entry) head; /* Scoreboard list */ |
}; |
#define scrb_head head.lh_first /* first element of scoreboard */ |
/* return codes from routines that might have to clear the scoreboard |
*/ |
#define E_SCRB_CLEAR -1 |
#define E_SCRB_NOERR 0 |
/* reason parameters for scrb_clear |
*/ |
#define SCRB_INIT 0 |
#define SCRB_RENEGE 1 |
#define SCRB_NOMEM 2 |
#define SCRB_TIMEOUT 3 |
#endif /* __NETINET_TCP_SCOREBOARD_H */ |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp_seq.h |
---|
0,0 → 1,104 |
/*!\file netinet/tcp_seq.h |
* TCP serquence number handling. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993, 1995 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcp_seq.h 8.3 (Berkeley) 6/21/95 |
* $Id: tcp_seq.h,v 1.6 1995/10/03 16:54:14 wollman Exp $ |
*/ |
#ifndef __NETINET_TCP_SEQ_H |
#define __NETINET_TCP_SEQ_H |
/* |
* TCP sequence numbers are 32 bit integers operated |
* on with modular arithmetic. These macros can be |
* used to compare such integers. |
*/ |
#define SEQ_LT(a,b) ((long)((a)-(b)) < 0) |
#define SEQ_LEQ(a,b) ((long)((a)-(b)) <= 0) |
#define SEQ_GT(a,b) ((long)((a)-(b)) > 0) |
#define SEQ_GEQ(a,b) ((long)((a)-(b)) >= 0) |
/* for modulo comparisons of timestamps */ |
#define TSTMP_LT(a,b) ((long)((a)-(b)) < 0) |
#define TSTMP_GEQ(a,b) ((long)((a)-(b)) >= 0) |
/* |
* TCP connection counts are 32 bit integers operated |
* on with modular arithmetic. These macros can be |
* used to compare such integers. |
*/ |
#define CC_LT(a,b) ((long)((a)-(b)) < 0) |
#define CC_LEQ(a,b) ((long)((a)-(b)) <= 0) |
#define CC_GT(a,b) ((long)((a)-(b)) > 0) |
#define CC_GEQ(a,b) ((long)((a)-(b)) >= 0) |
/* Macro to increment a CC: skip 0 which has a special meaning */ |
#define CC_INC(c) (++(c) == 0 ? ++(c) : (c)) |
/* |
* Macros to initialize tcp sequence numbers for |
* send and receive from initial send and receive |
* sequence numbers. |
*/ |
#define tcp_rcvseqinit(tp) \ |
(tp)->rcv_adv = (tp)->rcv_nxt = (tp)->irs + 1 |
#if defined(TCP_SACK) |
#define tcp_sendseqinit(tp) \ |
(tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \ |
(tp)->recover = (tp)->sb.last_ack = (tp)->iss |
#elif defined(TCP_FACK) |
#define tcp_sendseqinit(tp) \ |
(tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \ |
(tp)->recover = (tp)->scrb.last_ack = (tp)->snd_fack = (tp)->iss |
#else |
#define tcp_sendseqinit(tp) \ |
(tp)->snd_una = (tp)->snd_nxt = (tp)->snd_max = (tp)->snd_up = \ |
(tp)->iss |
#endif |
#define TCP_PAWS_IDLE (24 * 24 * 60 * 60 * PR_SLOWHZ) |
/* timestamp wrap-around time */ |
#define TCP_ISSINCR (125*1024) /* increment for tcp_iss each second */ |
#ifdef _KERNEL |
tcp_seq tcp_iss; /* tcp initial send seq # */ |
#endif |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp_time.h |
---|
0,0 → 1,133 |
/*!\file netinet/tcp_time.h |
* TCP timer definitions. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcp_timer.h 8.1 (Berkeley) 6/10/93 |
* $Id: tcp_timer.h,v 1.10 1996/09/13 23:51:43 pst Exp $ |
*/ |
#ifndef __NETINET_TCP_TIMER_H |
#define __NETINET_TCP_TIMER_H |
/* |
* Definitions of the TCP timers. These timers are counted |
* down PR_SLOWHZ times a second. |
*/ |
#define TCPT_NTIMERS 4 |
#define TCPT_REXMT 0 /* retransmit */ |
#define TCPT_PERSIST 1 /* retransmit persistence */ |
#define TCPT_KEEP 2 /* keep alive */ |
#define TCPT_2MSL 3 /* 2*msl quiet time timer */ |
/* |
* The TCPT_REXMT timer is used to force retransmissions. |
* The TCP has the TCPT_REXMT timer set whenever segments |
* have been sent for which ACKs are expected but not yet |
* received. If an ACK is received which advances tp->snd_una, |
* then the retransmit timer is cleared (if there are no more |
* outstanding segments) or reset to the base value (if there |
* are more ACKs expected). Whenever the retransmit timer goes off, |
* we retransmit one unacknowledged segment, and do a backoff |
* on the retransmit timer. |
* |
* The TCPT_PERSIST timer is used to keep window size information |
* flowing even if the window goes shut. If all previous transmissions |
* have been acknowledged (so that there are no retransmissions in progress), |
* and the window is too small to bother sending anything, then we start |
* the TCPT_PERSIST timer. When it expires, if the window is nonzero, |
* we go to transmit state. Otherwise, at intervals send a single byte |
* into the peer's window to force him to update our window information. |
* We do this at most as often as TCPT_PERSMIN time intervals, |
* but no more frequently than the current estimate of round-trip |
* packet time. The TCPT_PERSIST timer is cleared whenever we receive |
* a window update from the peer. |
* |
* The TCPT_KEEP timer is used to keep connections alive. If an |
* connection is idle (no segments received) for TCPTV_KEEP_INIT amount of time, |
* but not yet established, then we drop the connection. Once the connection |
* is established, if the connection is idle for TCPTV_KEEP_IDLE time |
* (and keepalives have been enabled on the socket), we begin to probe |
* the connection. We force the peer to send us a segment by sending: |
* <SEQ=SND.UNA-1><ACK=RCV.NXT><CTL=ACK> |
* This segment is (deliberately) outside the window, and should elicit |
* an ack segment in response from the peer. If, despite the TCPT_KEEP |
* initiated segments we cannot elicit a response from a peer in TCPT_MAXIDLE |
* amount of time probing, then we drop the connection. |
*/ |
/* |
* Time constants. |
*/ |
#define TCPTV_MSL ( 30*PR_SLOWHZ) /* max seg lifetime (hah!) */ |
#define TCPTV_SRTTBASE 0 /* base roundtrip time; |
if 0, no idea yet */ |
#define TCPTV_RTOBASE ( 3*PR_SLOWHZ) /* assumed RTO if no info */ |
#define TCPTV_SRTTDFLT ( 3*PR_SLOWHZ) /* assumed RTT if no info */ |
#define TCPTV_PERSMIN ( 5*PR_SLOWHZ) /* retransmit persistence */ |
#define TCPTV_PERSMAX ( 60*PR_SLOWHZ) /* maximum persist interval */ |
#define TCPTV_KEEP_INIT ( 75*PR_SLOWHZ) /* initial connect keep alive */ |
#define TCPTV_KEEP_IDLE (120*60*PR_SLOWHZ) /* dflt time before probing */ |
#define TCPTV_KEEPINTVL ( 75*PR_SLOWHZ) /* default probe interval */ |
#define TCPTV_KEEPCNT 8 /* max probes before drop */ |
#define TCPTV_MIN ( 1*PR_SLOWHZ) /* minimum allowable value */ |
#define TCPTV_REXMTMAX ( 64*PR_SLOWHZ) /* max allowable REXMT value */ |
#define TCPTV_TWTRUNC 8 /* RTO factor to truncate TW */ |
#define TCP_LINGERTIME 120 /* linger at most 2 minutes */ |
#define TCP_MAXRXTSHIFT 12 /* maximum retransmits */ |
#ifdef TCPTIMERS |
static char *tcptimers[] = |
{ "REXMT", "PERSIST", "KEEP", "2MSL" }; |
#endif |
/* |
* Force a time value to be in a certain range. |
*/ |
#define TCPT_RANGESET(tv, value, tvmin, tvmax) { \ |
(tv) = (value); \ |
if ((u_long)(tv) < (u_long)(tvmin)) \ |
(tv) = (tvmin); \ |
else if ((u_long)(tv) > (u_long)(tvmax)) \ |
(tv) = (tvmax); \ |
} |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/tcp_var.h |
---|
0,0 → 1,403 |
/*!\file netinet/tcp_var.h |
* Internal TCP structures and statistics. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993, 1994, 1995 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcp_var.h 8.4 (Berkeley) 5/24/95 |
* $Id: tcp_var.h,v 1.36 1996/09/13 23:54:03 pst Exp $ |
*/ |
#ifndef __NETINET_TCP_VAR_H |
#define __NETINET_TCP_VAR_H |
/* |
* Kernel variables for tcp. |
*/ |
#ifdef TCP_AUTO |
/* AUTO_RCV_HITHRESH flush reassembly queue, drop incoming packets |
*/ |
#define AUTO_RCV_HITHRESH (u_long)(0.95 * NMBCLUSTERS) |
/* AUTO_RCV_LOWTHRESH drop incoming packets |
*/ |
#define AUTO_RCV_LOWTHRESH (u_long)(0.9 * NMBCLUSTERS) |
/* AUTO_SND_THRESH reduce so_snd.sb_hiwat by acked |
*/ |
#define AUTO_SND_THRESH (u_long)(0.50 * NMBCLUSTERS) |
#endif |
#if defined(TCP_SACK) || defined(TCP_FACK) |
#include <netinet/tcp_scor.h> |
struct sackblock { |
tcp_seq start; |
tcp_seq end; |
}; |
#endif |
/* |
* Tcp control block, one per tcp; fields: |
*/ |
struct tcpcb { |
struct tcpiphdr *seg_next; /* sequencing queue */ |
struct tcpiphdr *seg_prev; |
/* !! struct ipqehead segq; */ /* sequencing queue */ |
int t_state; /* state of this connection */ |
int t_timer[TCPT_NTIMERS]; /* tcp timers */ |
int t_rxtshift; /* log(2) of rexmt exp. backoff */ |
int t_rxtcur; /* current retransmit value */ |
#ifdef TCP_FACK |
short t_padd; /* filler to preserve alignment */ |
#else |
short t_dupacks; /* consecutive dup acks recd */ |
#endif |
u_int t_maxseg; /* maximum segment size */ |
u_int t_maxopd; /* mss plus options */ |
int t_force; /* 1 if forcing out a byte */ |
u_int t_flags; |
#define TF_ACKNOW 0x0001 /* ack peer immediately */ |
#define TF_DELACK 0x0002 /* ack, but try to delay it */ |
#define TF_NODELAY 0x0004 /* don't delay packets to coalesce */ |
#define TF_NOOPT 0x0008 /* don't use tcp options */ |
#define TF_SENTFIN 0x0010 /* have sent FIN */ |
#define TF_REQ_SCALE 0x0020 /* have/will request window scaling */ |
#define TF_RCVD_SCALE 0x0040 /* other side has requested scaling */ |
#define TF_REQ_TSTMP 0x0080 /* have/will request timestamps */ |
#define TF_RCVD_TSTMP 0x0100 /* a timestamp was received in SYN */ |
#define TF_SACK_PERMIT 0x0200 /* other side said I could SACK */ |
#define TF_NEEDSYN 0x0400 /* send SYN (implicit state) */ |
#define TF_NEEDFIN 0x0800 /* send FIN (implicit state) */ |
#define TF_NOPUSH 0x1000 /* don't push */ |
#define TF_REQ_CC 0x2000 /* have/will request CC */ |
#define TF_RCVD_CC 0x4000 /* a CC was received in SYN */ |
#define TF_SENDCCNEW 0x8000 /* send CCnew instead of CC in SYN */ |
struct tcpiphdr *t_template; /* skeletal packet for transmit */ |
struct inpcb *t_inpcb; /* back pointer to internet pcb */ |
/* |
* The following fields are used as in the protocol specification. |
* See RFC783, Dec. 1981, page 21. |
*/ |
/* send sequence variables */ |
tcp_seq snd_una; /* send unacknowledged */ |
tcp_seq snd_nxt; /* send next */ |
tcp_seq snd_up; /* send urgent pointer */ |
tcp_seq snd_wl1; /* window update seg seq number */ |
tcp_seq snd_wl2; /* window update seg ack number */ |
tcp_seq iss; /* initial send sequence number */ |
u_long snd_wnd; /* send window */ |
/* receive sequence variables */ |
u_long rcv_wnd; /* receive window */ |
tcp_seq rcv_nxt; /* receive next */ |
tcp_seq rcv_up; /* receive urgent pointer */ |
tcp_seq irs; /* initial receive sequence number */ |
/* |
* Additional variables for this implementation. |
*/ |
/* receive variables */ |
tcp_seq rcv_adv; /* advertised window */ |
/* retransmit variables */ |
tcp_seq snd_max; /* highest sequence number sent; |
* used to recognize retransmits |
*/ |
/* congestion control (for slow start, source quench, retransmit after loss) */ |
u_long snd_cwnd; /* congestion-controlled window */ |
u_long snd_ssthresh; /* snd_cwnd size threshold for |
* for slow start exponential to |
* linear switch |
*/ |
/* |
* transmit timing stuff. See below for scale of srtt and rttvar. |
* "Variance" is actually smoothed difference. |
*/ |
u_int t_idle; /* inactivity time */ |
int t_rtt; /* round trip time */ |
tcp_seq t_rtseq; /* sequence number being timed */ |
int t_srtt; /* smoothed round-trip time */ |
int t_rttvar; /* variance in round-trip time */ |
u_int t_rttmin; /* minimum rtt allowed */ |
u_long max_sndwnd; /* largest window peer has offered */ |
/* out-of-band data */ |
char t_oobflags; /* have some */ |
char t_iobc; /* input character */ |
#define TCPOOB_HAVEDATA 0x01 |
#define TCPOOB_HADDATA 0x02 |
int t_softerror; /* possible error not yet reported */ |
/* RFC 1323 variables */ |
u_char snd_scale; /* window scaling for send window */ |
u_char rcv_scale; /* window scaling for recv window */ |
u_char request_r_scale; /* pending window scaling */ |
u_char requested_s_scale; |
u_long ts_recent; /* timestamp echo data */ |
u_long ts_recent_age; /* when last updated */ |
tcp_seq last_ack_sent; |
/* RFC 1644 variables */ |
tcp_cc cc_send; /* send connection count */ |
tcp_cc cc_recv; /* receive connection count */ |
u_long t_duration; /* connection duration */ |
/* TUBA stuff */ |
caddr_t t_tuba_pcb; /* next level down pcb for TCP over z */ |
/* More RTT stuff */ |
u_long t_rttupdated; /* number of times rtt sampled */ |
#if defined(TCP_FACK) || defined(TCP_AUTO) |
u_short t_alt_flags; /* experimental flags */ |
#define TAF_SACK_SEEN 0x0001 /* other side can send SACKs */ |
#define TAF_RECOVERY 0x0002 /* We are recovering from a lost segment */ |
#define TAF_RATEHALF 0x0004 /* We are reducing the window during recovery */ |
#define TAF_REPAIRED 0x0008 /* We have retransmitted something */ |
#define TAF_WHOLD 0x0010 /* we are in the window hold state */ |
#define TAF_TOGGLE 0x0020 /* divide by 2 toggle */ |
#define TAF_AUTO_OFF 0x0040 /* autotuning is forced off */ |
#endif |
#if defined(TCP_SACK) || defined(TCP_FACK) |
#define SACK_LIST_LEN 10 |
/* Needed for SACK and FACK: */ |
struct sackblock sack_list[SACK_LIST_LEN]; /* Hack, keep 5 most recent SACKs */ |
struct scoreboard scrb; |
int snd_retran_data; |
tcp_seq recover; |
#endif |
#ifdef TCP_SACK |
int pipe; |
#endif |
#ifdef TCP_FACK |
tcp_seq snd_fack; |
#define TCP_FACK_REXMTTHRESH 3 /* number of SACKs before retransmitting a block */ |
u_long lothresh; /* recovery window floor */ |
u_long hithresh; /* maximum window following recovery */ |
#endif |
}; |
/* |
* Structure to hold TCP options that are only used during segment |
* processing (in tcp_input), but not held in the tcpcb. |
* It's basically used to reduce the number of parameters |
* to tcp_dooptions. |
*/ |
struct tcpopt { |
u_long to_flag; /* which options are present */ |
#define TOF_TS 0x0001 /* timestamp */ |
#define TOF_CC 0x0002 /* CC and CCnew are exclusive */ |
#define TOF_CCNEW 0x0004 |
#define TOF_CCECHO 0x0008 |
u_long to_tsval; |
u_long to_tsecr; |
tcp_cc to_cc; /* holds CC or CCnew */ |
tcp_cc to_ccecho; |
}; |
/* |
* The TAO cache entry which is stored in the protocol family specific |
* portion of the route metrics. |
*/ |
struct rmxp_tao { |
tcp_cc tao_cc; /* latest CC in valid SYN */ |
tcp_cc tao_ccsent; /* latest CC sent to peer */ |
u_short tao_mssopt; /* peer's cached MSS */ |
#ifdef notyet |
u_short tao_flags; /* cache status flags */ |
#define TAOF_DONT 0x0001 /* peer doesn't understand rfc1644 */ |
#define TAOF_OK 0x0002 /* peer does understand rfc1644 */ |
#define TAOF_UNDEF 0 /* we don't know yet */ |
#endif /* notyet */ |
}; |
#define rmx_taop(r) ((struct rmxp_tao *)(r).rmx_filler) |
#define intotcpcb(ip) ((struct tcpcb *)(ip)->inp_ppcb) |
#define sototcpcb(so) (intotcpcb(sotoinpcb(so))) |
/* |
* The smoothed round-trip time and estimated variance |
* are stored as fixed point numbers scaled by the values below. |
* For convenience, these scales are also used in smoothing the average |
* (smoothed = (1/scale)sample + ((scale-1)/scale)smoothed). |
* With these scales, srtt has 3 bits to the right of the binary point, |
* and thus an "ALPHA" of 0.875. rttvar has 2 bits to the right of the |
* binary point, and is smoothed with an ALPHA of 0.75. |
*/ |
#define TCP_RTT_SCALE 32 /* multiplier for srtt; 3 bits frac. */ |
#define TCP_RTT_SHIFT 5 /* shift for srtt; 3 bits frac. */ |
#define TCP_RTTVAR_SCALE 16 /* multiplier for rttvar; 2 bits */ |
#define TCP_RTTVAR_SHIFT 4 /* shift for rttvar; 2 bits */ |
#define TCP_DELTA_SHIFT 2 /* see tcp_input.c */ |
/* |
* The initial retransmission should happen at rtt + 4 * rttvar. |
* Because of the way we do the smoothing, srtt and rttvar |
* will each average +1/2 tick of bias. When we compute |
* the retransmit timer, we want 1/2 tick of rounding and |
* 1 extra tick because of +-1/2 tick uncertainty in the |
* firing of the timer. The bias will give us exactly the |
* 1.5 tick we need. But, because the bias is |
* statistical, we have to test that we don't drop below |
* the minimum feasible timer (which is 2 ticks). |
* This version of the macro adapted from a paper by Lawrence |
* Brakmo and Larry Peterson which outlines a problem caused |
* by insufficient precision in the original implementation, |
* which results in inappropriately large RTO values for very |
* fast networks. |
*/ |
#define TCP_REXMTVAL(tp) \ |
((((tp)->t_srtt >> (TCP_RTT_SHIFT - TCP_DELTA_SHIFT)) \ |
+ (tp)->t_rttvar) >> TCP_DELTA_SHIFT) |
/* XXX |
* We want to avoid doing m_pullup on incoming packets but that |
* means avoiding dtom on the tcp reassembly code. That in turn means |
* keeping an mbuf pointer in the reassembly queue (since we might |
* have a cluster). As a quick hack, the source & destination |
* port numbers (which are no longer needed once we've located the |
* tcpcb) are overlayed with an mbuf pointer. |
*/ |
#define REASS_MBUF(ti) (*(struct mbuf **)&((ti)->ti_t)) |
/* |
* TCP statistics. |
* Many of these should be kept per connection, |
* but that's inconvenient at the moment. |
*/ |
struct tcpstat { |
u_long tcps_connattempt; /* connections initiated */ |
u_long tcps_accepts; /* connections accepted */ |
u_long tcps_connects; /* connections established */ |
u_long tcps_drops; /* connections dropped */ |
u_long tcps_conndrops; /* embryonic connections dropped */ |
u_long tcps_closed; /* conn. closed (includes drops) */ |
u_long tcps_segstimed; /* segs where we tried to get rtt */ |
u_long tcps_rttupdated; /* times we succeeded */ |
u_long tcps_delack; /* delayed acks sent */ |
u_long tcps_timeoutdrop; /* conn. dropped in rxmt timeout */ |
u_long tcps_rexmttimeo; /* retransmit timeouts */ |
u_long tcps_persisttimeo; /* persist timeouts */ |
u_long tcps_keeptimeo; /* keepalive timeouts */ |
u_long tcps_keepprobe; /* keepalive probes sent */ |
u_long tcps_keepdrops; /* connections dropped in keepalive */ |
u_long tcps_sndtotal; /* total packets sent */ |
u_long tcps_sndpack; /* data packets sent */ |
u_long tcps_sndbyte; /* data bytes sent */ |
u_long tcps_sndrexmitpack; /* data packets retransmitted */ |
u_long tcps_sndrexmitbyte; /* data bytes retransmitted */ |
u_long tcps_sndacks; /* ack-only packets sent */ |
u_long tcps_sndprobe; /* window probes sent */ |
u_long tcps_sndurg; /* packets sent with URG only */ |
u_long tcps_sndwinup; /* window update-only packets sent */ |
u_long tcps_sndctrl; /* control (SYN|FIN|RST) packets sent */ |
u_long tcps_rcvtotal; /* total packets received */ |
u_long tcps_rcvpack; /* packets received in sequence */ |
u_long tcps_rcvbyte; /* bytes received in sequence */ |
u_long tcps_rcvbadsum; /* packets received with ccksum errs */ |
u_long tcps_rcvbadoff; /* packets received with bad offset */ |
u_long tcps_rcvshort; /* packets received too short */ |
u_long tcps_rcvduppack; /* duplicate-only packets received */ |
u_long tcps_rcvdupbyte; /* duplicate-only bytes received */ |
u_long tcps_rcvpartduppack; /* packets with some duplicate data */ |
u_long tcps_rcvpartdupbyte; /* dup. bytes in part-dup. packets */ |
u_long tcps_rcvoopack; /* out-of-order packets received */ |
u_long tcps_rcvoobyte; /* out-of-order bytes received */ |
u_long tcps_rcvpackafterwin; /* packets with data after window */ |
u_long tcps_rcvbyteafterwin; /* bytes rcvd after window */ |
u_long tcps_rcvafterclose; /* packets rcvd after "close" */ |
u_long tcps_rcvwinprobe; /* rcvd window probe packets */ |
u_long tcps_rcvdupack; /* rcvd duplicate acks */ |
u_long tcps_rcvacktoomuch; /* rcvd acks for unsent data */ |
u_long tcps_rcvackpack; /* rcvd ack packets */ |
u_long tcps_rcvackbyte; /* bytes acked by rcvd acks */ |
u_long tcps_rcvwinupd; /* rcvd window update packets */ |
u_long tcps_pawsdrop; /* segments dropped due to PAWS */ |
u_long tcps_predack; /* times hdr predict ok for acks */ |
u_long tcps_preddat; /* times hdr predict ok for data pkts */ |
u_long tcps_pcbcachemiss; |
u_long tcps_cachedrtt; /* times cached RTT in route updated */ |
u_long tcps_cachedrttvar; /* times cached rttvar updated */ |
u_long tcps_cachedssthresh; /* times cached ssthresh updated */ |
u_long tcps_usedrtt; /* times RTT initialized from route */ |
u_long tcps_usedrttvar; /* times RTTVAR initialized from rt */ |
u_long tcps_usedssthresh; /* times ssthresh initialized from rt*/ |
u_long tcps_persistdrop; /* timeout in persist state */ |
u_long tcps_badsyn; /* bogus SYN, e.g. premature ACK */ |
u_long tcps_mturesent; /* resends due to MTU discovery */ |
u_long tcps_listendrop; /* listen queue overflows */ |
#ifdef TCP_FACK |
/* NOTE: This may break some programs that rely on this structure |
* being fixed length. |
*/ |
u_long tcps_fack_recovery; /* fack: recovery episodes */ |
u_long tcps_fack_sndpack; /* fack: data packets sent */ |
u_long tcps_fack_sndbyte; /* fack: data bytes sent */ |
u_long tcps_fack_sndrexmitpack;/* fack: data packets retransmitted */ |
u_long tcps_fack_sndrexmitbyte;/* fack: data bytes retransmitted */ |
#endif |
}; |
/* |
* Names for TCP sysctl objects |
*/ |
#define TCPCTL_DO_RFC1323 1 /* use RFC-1323 extensions */ |
#define TCPCTL_DO_RFC1644 2 /* use RFC-1644 extensions */ |
#define TCPCTL_MSSDFLT 3 /* MSS default */ |
#define TCPCTL_STATS 4 /* statistics (read-only) */ |
#define TCPCTL_RTTDFLT 5 /* default RTT estimate */ |
#define TCPCTL_KEEPIDLE 6 /* keepalive idle timer */ |
#define TCPCTL_KEEPINTVL 7 /* interval to send keepalives */ |
#define TCPCTL_SENDSPACE 8 /* send buffer space */ |
#define TCPCTL_RECVSPACE 9 /* receive buffer space */ |
#define TCPCTL_KEEPINIT 10 /* receive buffer space */ |
#define TCPCTL_MAXID 11 |
#define TCPCTL_NAMES { \ |
{ 0, 0 }, \ |
{ "rfc1323", CTLTYPE_INT }, \ |
{ "rfc1644", CTLTYPE_INT }, \ |
{ "mssdflt", CTLTYPE_INT }, \ |
{ "stats", CTLTYPE_STRUCT }, \ |
{ "rttdflt", CTLTYPE_INT }, \ |
{ "keepidle", CTLTYPE_INT }, \ |
{ "keepintvl", CTLTYPE_INT }, \ |
{ "sendspace", CTLTYPE_INT }, \ |
{ "recvspace", CTLTYPE_INT }, \ |
{ "keepinit", CTLTYPE_INT }, \ |
} |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/tcpip.h |
---|
0,0 → 1,85 |
/*!\file netinet/tcpip.h |
* TCP header definitions. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)tcpip.h 8.1 (Berkeley) 6/10/93 |
* $Id: tcpip.h,v 1.4 1995/02/08 20:18:48 wollman Exp $ |
*/ |
#ifndef __NETINET_TCPIP_H |
#define __NETINET_TCPIP_H |
#include <sys/packon.h> |
/* |
* Tcp+ip header, after ip options removed. |
*/ |
struct tcpiphdr { |
struct ipovly ti_i; /* overlaid ip structure */ |
struct tcphdr ti_t; /* tcp header */ |
}; |
#ifdef notyet |
/* |
* Tcp+ip header, after ip options removed but including TCP options. |
*/ |
struct full_tcpiphdr { |
struct ipovly ti_i; /* overlaid ip structure */ |
struct tcphdr ti_t; /* tcp header */ |
char ti_o[TCP_MAXOLEN]; /* space for tcp options */ |
}; |
#endif /* notyet */ |
#include <sys/packoff.h> |
#define ti_next ti_i.ih_next |
#define ti_prev ti_i.ih_prev |
#define ti_x1 ti_i.ih_x1 |
#define ti_pr ti_i.ih_pr |
#define ti_len ti_i.ih_len |
#define ti_src ti_i.ih_src |
#define ti_dst ti_i.ih_dst |
#define ti_sport ti_t.th_sport |
#define ti_dport ti_t.th_dport |
#define ti_seq ti_t.th_seq |
#define ti_ack ti_t.th_ack |
#define ti_x2 ti_t.th_x2 |
#define ti_off ti_t.th_off |
#define ti_flags ti_t.th_flags |
#define ti_win ti_t.th_win |
#define ti_sum ti_t.th_sum |
#define ti_urp ti_t.th_urp |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/udp.h |
---|
0,0 → 1,54 |
/*!\file netinet/udp.h |
* UDP header. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)udp.h 8.1 (Berkeley) 6/10/93 |
* $FreeBSD: src/sys/netinet/udp.h,v 1.7 1999/08/28 00:49:34 peter Exp $ |
*/ |
#ifndef _NETINET_UDP_H_ |
#define _NETINET_UDP_H_ |
/* |
* Udp protocol header. |
* Per RFC 768, September, 1981. |
*/ |
struct udphdr { |
u_short uh_sport; /* source port */ |
u_short uh_dport; /* destination port */ |
u_short uh_ulen; /* udp length */ |
u_short uh_sum; /* udp checksum */ |
}; |
#endif |
/pkgnet/tags/20220214/watt32/inc/netinet/udp_var.h |
---|
0,0 → 1,100 |
/*!\file netinet/udp_var.h |
* Internal UDP statistics. |
*/ |
/* |
* Copyright (c) 1982, 1986, 1989, 1993 |
* The Regents of the University of California. All rights reserved. |
* |
* Redistribution and use in source and binary forms, with or without |
* modification, are permitted provided that the following conditions |
* are met: |
* 1. Redistributions of source code must retain the above copyright |
* notice, this list of conditions and the following disclaimer. |
* 2. Redistributions in binary form must reproduce the above copyright |
* notice, this list of conditions and the following disclaimer in the |
* documentation and/or other materials provided with the distribution. |
* 3. All advertising materials mentioning features or use of this software |
* must display the following acknowledgement: |
* This product includes software developed by the University of |
* California, Berkeley and its contributors. |
* 4. Neither the name of the University nor the names of its contributors |
* may be used to endorse or promote products derived from this software |
* without specific prior written permission. |
* |
* THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND |
* ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE |
* IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE |
* ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE |
* FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL |
* DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS |
* OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) |
* HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT |
* LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY |
* OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF |
* SUCH DAMAGE. |
* |
* @(#)udp_var.h 8.1 (Berkeley) 6/10/93 |
* $Id: udp_var.h,v 1.9 1996/06/05 17:20:35 wollman Exp $ |
*/ |
#ifndef __NETINET_UDP_VAR_H |
#define __NETINET_UDP_VAR_H |
/* |
* UDP kernel structures and variables. |
*/ |
#ifdef NOT_NEEDED |
#include <sys/packon.h> |
struct udpiphdr { |
struct ipovly ui_i; /* overlaid ip structure */ |
struct udphdr ui_u; /* udp header */ |
}; |
#include <sys/packoff.h> |
#define ui_next ui_i.ih_next |
#define ui_prev ui_i.ih_prev |
#define ui_x1 ui_i.ih_x1 |
#define ui_pr ui_i.ih_pr |
#define ui_len ui_i.ih_len |
#define ui_src ui_i.ih_src |
#define ui_dst ui_i.ih_dst |
#define ui_sport ui_u.uh_sport |
#define ui_dport ui_u.uh_dport |
#define ui_ulen ui_u.uh_ulen |
#define ui_sum ui_u.uh_sum |
#endif |
struct udpstat { |
/* input statistics: */ |
u_long udps_ipackets; /* total input packets */ |
u_long udps_hdrops; /* packet shorter than header */ |
u_long udps_badsum; /* checksum error */ |
u_long udps_badlen; /* data length larger than packet */ |
u_long udps_noport; /* no socket on port */ |
u_long udps_noportbcast; /* of above, arrived as broadcast */ |
u_long udps_fullsock; /* not delivered, input socket full */ |
u_long udpps_pcbcachemiss; /* input packets missing pcb cache */ |
u_long udpps_pcbhashmiss; /* input packets not for hashed pcb */ |
/* output statistics: */ |
u_long udps_opackets; /* total output packets */ |
}; |
/* |
* Names for UDP sysctl objects |
*/ |
#define UDPCTL_CHECKSUM 1 /* checksum UDP packets */ |
#define UDPCTL_STATS 2 /* statistics (read-only) */ |
#define UDPCTL_MAXDGRAM 3 /* max datagram size */ |
#define UDPCTL_RECVSPACE 4 /* default receive buffer space */ |
#define UDPCTL_MAXID 5 |
#define UDPCTL_NAMES { \ |
{ 0, 0 }, \ |
{ "checksum", CTLTYPE_INT }, \ |
{ "stats", CTLTYPE_STRUCT }, \ |
{ "maxdgram", CTLTYPE_INT }, \ |
{ "recvspace", CTLTYPE_INT }, \ |
} |
#endif |