forked from Imagelibrary/rtems
* Makefile.am: Added sys/linker_set.h * kern/Makefile.am: Added kern_mib.c and kern_sysctl.c. * kern/uipc_socket.c: OID changed from KERN_SOMAXCONN to KIPC_SOMAXCONN. * kern/uipc_socket2.c: OID changed from KERN_MAXSOCKBUF to KIPC_MAXSOCKBUF. * net/if_ethersubr.c: FreeBSD 2.2.2 does not have a _net_link node while 5.0 does. * net/if_ppp.c: Removed the TEXT_SET define as these macros are now implemented. * net/rtsock.c: Enable sysctl support plus fix the bug with the lastest FreeBSD sysctl header file. * netinet/icmp_var.h: FreeBSD 2.2.2 does not have a _net_inet_icmp node while 5.0 does. * netinet/if_ether.c: FreeBSD 2.2.2 does not have a _net_link_ether node while 5.0 does. * netinet/igmp_var.h: FreeBSD 2.2.2 does not have a _net_inet_igmp node while 5.0 does. * netinet/in_pcb.c: Fixed the arguments to the sysctl call. Add inp_gencnt and ipi_count. These are used when listing connections. * netinet/in_pcb.h: Added counters to aid the listing of connections. * netinet/in_var.h: Provide the _net_inet_ip and _net_inet_raw nodes. * netinet/ip_fw.c: Disable the firewall sysctl calls. * netinet/tcp_subr.c: Merge tcp_pcblist from the lastest FreeBSD source. * netinet/tcp_var.h: Add structures needed by net-snmp to list connections. * netinet/udp_usrreq.c: Merged udp_pcblist from the lastest FreeBSD source. * netinet/udp_var.h: Added the sysctl id UDPCTL_PCBLIST. Used by net-snmp. * rtems_glue.c: Call sysctl_register_all when initialising the network stack to register all the sysctl calls. These are in the special sections and required an updated linker script. * rtems/rtems_syscall.c: Add the sysctl call. * sys/kernel.h: Use the lastest FreeBSD method of handling sysctl structures. This now held in the sys/linker_set.h file. * sys/queue.h: This is from the lastest FreeBSD code with the circular code merged back in as it is not used in the lastest FreeBSD kernel. * sys/sysctl.h: The lastest sysctl. This was needed to use with the new linker set method. The FreeBSD 2.2.2 version has asm hacks. The lastest version of the FreeBSD does not have these hacks. It uses gcc attribute directives.
158 lines
6.1 KiB
C
158 lines
6.1 KiB
C
/*
|
|
* 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$
|
|
*/
|
|
|
|
#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);
|
|
|
|
typedef u_int64_t inp_gen_t;
|
|
|
|
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; /* PCB list info */
|
|
struct in_addr inp_faddr; /* foreign host table entry */
|
|
struct in_addr inp_laddr; /* local host table entry */
|
|
u_short inp_fport; /* foreign port */
|
|
u_short inp_lport; /* local port */
|
|
caddr_t inp_ppcb; /* pointer to per-protocol pcb */
|
|
struct socket *inp_socket; /* back pointer to socket */
|
|
struct mbuf *inp_options; /* IP options */
|
|
struct route inp_route; /* placeholder for routing entry */
|
|
int inp_flags; /* generic IP/datagram flags */
|
|
u_char inp_ip_tos; /* type of service proto */
|
|
u_char inp_ip_ttl; /* time to live proto */
|
|
u_char inp_ip_p; /* protocol proto */
|
|
u_char pad[1]; /* alignment */
|
|
struct ip_moptions *inp_moptions; /* IP multicast options */
|
|
inp_gen_t inp_gencnt; /* generation count of this instance */
|
|
#if 0 /* Someday, perhaps... */
|
|
struct ip inp_ip; /* header prototype; should have more */
|
|
#endif
|
|
};
|
|
|
|
/*
|
|
* Interface exported to userland by various protocols which use
|
|
* inpcbs. Hack alert -- only define if struct xsocket is in scope.
|
|
*
|
|
* ccj - 20 Nov 2002
|
|
* Double hack alert. This is taken from the pre 5.0 sources and
|
|
* merged into RTEMS. This allows the TCPCTL_PCBLIST code in
|
|
* net-snmp to work.
|
|
*/
|
|
#ifdef _SYS_SOCKETVAR_H_
|
|
typedef u_int64_t so_gen_t; /* should be in sys/sockvar.h */
|
|
|
|
struct xinpcb {
|
|
size_t xi_len; /* length of this structure */
|
|
struct inpcb xi_inp;
|
|
/* struct xsocket xi_socket; ccj removed */
|
|
u_int64_t xi_alignment_hack;
|
|
};
|
|
|
|
|
|
struct xinpgen {
|
|
size_t xig_len; /* length of this structure */
|
|
u_int xig_count; /* number of PCBs at this time */
|
|
inp_gen_t xig_gen; /* generation count at this time */
|
|
so_gen_t xig_sogen; /* socket generation count at this time */
|
|
};
|
|
#endif /* _SYS_SOCKETVAR_H_ */
|
|
|
|
struct inpcbinfo {
|
|
struct inpcbhead *listhead;
|
|
struct inpcbhead *hashbase;
|
|
unsigned long hashmask;
|
|
unsigned short lastport;
|
|
unsigned short lastlow;
|
|
unsigned short lasthi;
|
|
u_int ipi_count; /* number of pcbs in this list */
|
|
u_int64_t ipi_gencnt; /* current generation count */
|
|
};
|
|
|
|
#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)
|
|
|
|
#ifdef KERNEL
|
|
void in_losing __P((struct inpcb *));
|
|
int in_pcballoc __P((struct socket *, struct inpcbinfo *));
|
|
int in_pcbbind __P((struct inpcb *, struct mbuf *));
|
|
int in_pcbconnect __P((struct inpcb *, struct mbuf *));
|
|
void in_pcbdetach __P((struct inpcb *));
|
|
void in_pcbdisconnect __P((struct inpcb *));
|
|
int in_pcbladdr __P((struct inpcb *, struct mbuf *,
|
|
struct sockaddr_in **));
|
|
struct inpcb *
|
|
in_pcblookup __P((struct inpcbinfo *,
|
|
struct in_addr, u_int, struct in_addr, u_int, int));
|
|
struct inpcb *
|
|
in_pcblookuphash __P((struct inpcbinfo *,
|
|
struct in_addr, u_int, struct in_addr, u_int, int));
|
|
void in_pcbnotify __P((struct inpcbhead *, struct sockaddr *,
|
|
u_int, struct in_addr, u_int, int, void (*)(struct inpcb *, int)));
|
|
void in_pcbrehash __P((struct inpcb *));
|
|
void in_setpeeraddr __P((struct inpcb *, struct mbuf *));
|
|
void in_setsockaddr __P((struct inpcb *, struct mbuf *));
|
|
#endif
|
|
|
|
#endif
|