<sys/socket.h>, <netinet/{in,tcp,udp,udp_var}.h>
. add sa_len to sockaddr, sin_len to sockaddr_in . rename SCM_CREDENTIALS to SCM_CREDS . retire PF_FILE (same as PF_UNIX) Change-Id: Id3ec63fe2556fc7ceb48de8ad4e80736df3ddfc7
This commit is contained in:
parent
dda632a24f
commit
01624e6f86
14 changed files with 365 additions and 104 deletions
|
@ -791,7 +791,7 @@ recv_cred(devminor_t minor, struct ancillary *data,
|
|||
|
||||
cmsg->cmsg_len = CMSG_LEN(sizeof(struct uucred));
|
||||
cmsg->cmsg_level = SOL_SOCKET;
|
||||
cmsg->cmsg_type = SCM_CREDENTIALS;
|
||||
cmsg->cmsg_type = SCM_CREDS;
|
||||
memcpy(CMSG_DATA(cmsg), &data->cred, sizeof(struct uucred));
|
||||
|
||||
return OK;
|
||||
|
|
|
@ -2,6 +2,7 @@
|
|||
#include <string.h>
|
||||
#include <unistd.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ucred.h>
|
||||
|
||||
/*
|
||||
* get the effective user ID and effective group ID of a peer
|
||||
|
|
|
@ -95,6 +95,7 @@ static int _tcp_getpeername(int sock, struct sockaddr *__restrict address,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= tcpconfp->nwtc_remaddr;
|
||||
sin.sin_port= tcpconfp->nwtc_remport;
|
||||
sin.sin_len = sizeof(sin);
|
||||
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
|
@ -122,6 +123,7 @@ static int _udp_getpeername(int sock, struct sockaddr *__restrict address,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= udpopt->nwuo_remaddr;
|
||||
sin.sin_port= udpopt->nwuo_remport;
|
||||
sin.sin_len = sizeof(sin);
|
||||
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
|
|
|
@ -111,6 +111,7 @@ static int _tcp_getsockname(int fd, struct sockaddr *__restrict address,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= tcpconf->nwtc_locaddr ;
|
||||
sin.sin_port= tcpconf->nwtc_locport;
|
||||
sin.sin_len= sizeof(sin);
|
||||
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
|
@ -140,6 +141,7 @@ static int _udp_getsockname(int fd, struct sockaddr *__restrict address,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= udpopt->nwuo_locaddr ;
|
||||
sin.sin_port= udpopt->nwuo_locport;
|
||||
sin.sin_len= sizeof(sin);
|
||||
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
|
|
|
@ -117,6 +117,7 @@ static ssize_t _tcp_recvfrom(int sock, void *__restrict buffer, size_t length,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= tcpconfp->nwtc_remaddr;
|
||||
sin.sin_port= tcpconfp->nwtc_remport;
|
||||
sin.sin_len= sizeof(sin);
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
len= sizeof(sin);
|
||||
|
@ -170,6 +171,7 @@ static ssize_t _udp_recvfrom(int sock, void *__restrict buffer, size_t length,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= udpoptp->nwuo_remaddr;
|
||||
sin.sin_port= udpoptp->nwuo_remport;
|
||||
sin.sin_len= sizeof(sin);
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
len= sizeof(sin);
|
||||
|
@ -216,6 +218,7 @@ static ssize_t _udp_recvfrom(int sock, void *__restrict buffer, size_t length,
|
|||
sin.sin_family= AF_INET;
|
||||
sin.sin_addr.s_addr= io_hdrp->uih_src_addr;
|
||||
sin.sin_port= io_hdrp->uih_src_port;
|
||||
sin.sin_len= sizeof(sin);
|
||||
len= *address_len;
|
||||
if (len > sizeof(sin))
|
||||
len= sizeof(sin);
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
#include "namespace.h"
|
||||
|
||||
#ifdef __weak_alias
|
||||
__weak_alias(socket, _socket)
|
||||
__weak_alias(socket, __socket30)
|
||||
#endif
|
||||
|
||||
#include <errno.h>
|
||||
|
|
|
@ -113,10 +113,8 @@ __RCSID("$NetBSD: ftpd.c,v 1.198 2012/06/19 06:06:34 dholland Exp $");
|
|||
#include <sys/resource.h>
|
||||
|
||||
#include <netinet/in.h>
|
||||
#ifndef __minix
|
||||
#include <netinet/in_systm.h>
|
||||
#include <netinet/ip.h>
|
||||
#endif
|
||||
|
||||
#define FTP_NAMES
|
||||
#include <arpa/ftp.h>
|
||||
|
|
|
@ -1,5 +1,5 @@
|
|||
INCSDIR= /usr/include/netinet
|
||||
|
||||
INCS+= in.h tcp.h
|
||||
INCS+= in.h tcp.h in_systm.h ip.h
|
||||
|
||||
.include <bsd.kinc.mk>
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: in.h,v 1.86 2009/09/14 10:36:50 degroote Exp $ */
|
||||
/* $NetBSD: in.h,v 1.87 2012/06/22 14:54:35 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1990, 1993
|
||||
|
@ -234,14 +234,6 @@ struct in_addr {
|
|||
/*
|
||||
* Socket address, internet style.
|
||||
*/
|
||||
#ifdef __minix
|
||||
struct sockaddr_in
|
||||
{
|
||||
sa_family_t sin_family;
|
||||
in_port_t sin_port;
|
||||
struct in_addr sin_addr;
|
||||
};
|
||||
#else /* !__minix */
|
||||
struct sockaddr_in {
|
||||
uint8_t sin_len;
|
||||
sa_family_t sin_family;
|
||||
|
@ -249,11 +241,9 @@ struct sockaddr_in {
|
|||
struct in_addr sin_addr;
|
||||
__int8_t sin_zero[8];
|
||||
};
|
||||
#endif /* !__minix */
|
||||
|
||||
#define INET_ADDRSTRLEN 16
|
||||
|
||||
#ifndef __minix
|
||||
/*
|
||||
* Structure used to describe IP options.
|
||||
* Used to store options internally, to pass them to a process,
|
||||
|
@ -269,13 +259,11 @@ struct ip_opts {
|
|||
__int8_t ip_opts[40]; /* actually variable in size */
|
||||
#endif
|
||||
};
|
||||
#endif /* __minix */
|
||||
|
||||
/*
|
||||
* Options for use with [gs]etsockopt at the IP level.
|
||||
* First word of comment is data type; bool is stored in int.
|
||||
*/
|
||||
#ifndef __minix
|
||||
#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. */
|
||||
|
@ -287,10 +275,9 @@ struct ip_opts {
|
|||
#define IP_MULTICAST_IF 9 /* in_addr; 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 */
|
||||
#endif /* !__minix */
|
||||
#define IP_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
|
||||
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop an IP group membership */
|
||||
#ifndef __minix
|
||||
#define IP_PORTALGO 18 /* int; port selection algo (rfc6056) */
|
||||
#define IP_PORTRANGE 19 /* int; range to use for ephemeral port */
|
||||
#define IP_RECVIF 20 /* bool; receive reception if w/dgram */
|
||||
#define IP_ERRORMTU 21 /* int; get MTU of last xmit = EMSGSIZE */
|
||||
|
@ -299,16 +286,13 @@ struct ip_opts {
|
|||
#endif
|
||||
#define IP_RECVTTL 23 /* bool; receive IP TTL w/dgram */
|
||||
#define IP_MINTTL 24 /* minimum TTL for packet or drop */
|
||||
#endif /* !__minix */
|
||||
|
||||
#ifndef __minix
|
||||
/*
|
||||
* 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; must fit in one mbuf */
|
||||
#endif /* !__minix */
|
||||
|
||||
/*
|
||||
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
|
||||
|
@ -318,7 +302,6 @@ struct ip_mreq {
|
|||
struct in_addr imr_interface; /* local IP address of interface */
|
||||
};
|
||||
|
||||
#ifndef __minix
|
||||
/*
|
||||
* Argument for IP_PORTRANGE:
|
||||
* - which range to search when port is unspecified at bind() or connect()
|
||||
|
@ -502,14 +485,12 @@ struct ip_mreq {
|
|||
{ "stats", CTLTYPE_STRUCT }, \
|
||||
}
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
#endif /* __minix */
|
||||
|
||||
/* INET6 stuff */
|
||||
#define __KAME_NETINET_IN_H_INCLUDED_
|
||||
#include <netinet6/in6.h>
|
||||
#undef __KAME_NETINET_IN_H_INCLUDED_
|
||||
|
||||
#ifndef __minix
|
||||
#ifdef _KERNEL
|
||||
/*
|
||||
* in_cksum_phdr:
|
||||
|
@ -617,6 +598,5 @@ sockaddr_in_alloc(const struct in_addr *addr, in_port_t port, int flags)
|
|||
return sa;
|
||||
}
|
||||
#endif /* _KERNEL */
|
||||
#endif /* __minix */
|
||||
|
||||
#endif /* !_NETINET_IN_H_ */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: tcp.h,v 1.28 2007/12/25 18:33:47 perry Exp $ */
|
||||
/* $NetBSD: tcp.h,v 1.30 2012/01/07 20:20:22 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
|
@ -37,29 +37,30 @@
|
|||
#include <sys/featuretest.h>
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#include <sys/types.h>
|
||||
|
||||
typedef u_int32_t tcp_seq;
|
||||
typedef uint32_t tcp_seq;
|
||||
/*
|
||||
* TCP header.
|
||||
* Per RFC 793, September, 1981.
|
||||
* Updated by RFC 3168, September, 2001.
|
||||
*/
|
||||
struct tcphdr {
|
||||
u_int16_t th_sport; /* source port */
|
||||
u_int16_t th_dport; /* destination port */
|
||||
uint16_t th_sport; /* source port */
|
||||
uint16_t th_dport; /* destination port */
|
||||
tcp_seq th_seq; /* sequence number */
|
||||
tcp_seq th_ack; /* acknowledgement number */
|
||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||
/*LINTED non-portable bitfields*/
|
||||
u_int8_t th_x2:4, /* (unused) */
|
||||
uint8_t th_x2:4, /* (unused) */
|
||||
th_off:4; /* data offset */
|
||||
#endif
|
||||
#if BYTE_ORDER == BIG_ENDIAN
|
||||
/*LINTED non-portable bitfields*/
|
||||
u_int8_t th_off:4, /* data offset */
|
||||
uint8_t th_off:4, /* data offset */
|
||||
th_x2:4; /* (unused) */
|
||||
#endif
|
||||
u_int8_t th_flags;
|
||||
uint8_t th_flags;
|
||||
#define TH_FIN 0x01
|
||||
#define TH_SYN 0x02
|
||||
#define TH_RST 0x04
|
||||
|
@ -68,9 +69,9 @@ struct tcphdr {
|
|||
#define TH_URG 0x20
|
||||
#define TH_ECE 0x40
|
||||
#define TH_CWR 0x80
|
||||
u_int16_t th_win; /* window */
|
||||
u_int16_t th_sum; /* checksum */
|
||||
u_int16_t th_urp; /* urgent pointer */
|
||||
uint16_t th_win; /* window */
|
||||
uint16_t th_sum; /* checksum */
|
||||
uint16_t th_urp; /* urgent pointer */
|
||||
} __packed;
|
||||
|
||||
#define TCPOPT_EOL 0
|
||||
|
@ -115,5 +116,18 @@ struct tcphdr {
|
|||
* User-settable options (used with setsockopt).
|
||||
*/
|
||||
#define TCP_NODELAY 1 /* don't delay send to coalesce packets */
|
||||
#define TCP_MAXSEG 2 /* set maximum segment size */
|
||||
#define TCP_KEEPIDLE 3
|
||||
#ifdef notyet
|
||||
#define TCP_NOPUSH 4 /* reserved for FreeBSD compat */
|
||||
#endif
|
||||
#define TCP_KEEPINTVL 5
|
||||
#define TCP_KEEPCNT 6
|
||||
#define TCP_KEEPINIT 7
|
||||
#ifdef notyet
|
||||
#define TCP_NOOPT 8 /* reserved for FreeBSD compat */
|
||||
#endif
|
||||
#define TCP_MD5SIG 0x10 /* use MD5 digests (RFC2385) */
|
||||
#define TCP_CONGCTL 0x20 /* selected congestion control */
|
||||
|
||||
#endif /* !_NETINET_TCP_H_ */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: udp.h,v 1.15 2012/01/07 20:20:12 christos Exp $ */
|
||||
/* $NetBSD: udp.h,v 1.16 2012/06/22 14:54:35 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1993
|
||||
|
@ -48,7 +48,6 @@ struct udphdr {
|
|||
|
||||
/* socket options for UDP */
|
||||
#define UDP_ENCAP 100
|
||||
#define UDP_RFC6056ALGO 200
|
||||
|
||||
/* Encapsulation types */
|
||||
#define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
/* $NetBSD: udp_var.h,v 1.37 2011/09/24 17:18:17 christos Exp $ */
|
||||
/* $NetBSD: udp_var.h,v 1.38 2012/06/22 14:54:35 christos Exp $ */
|
||||
|
||||
/*
|
||||
* Copyright (c) 1982, 1986, 1989, 1993
|
||||
|
@ -75,7 +75,6 @@ struct udpiphdr {
|
|||
#define UDPCTL_RECVSPACE 3 /* default recv buffer */
|
||||
#define UDPCTL_LOOPBACKCKSUM 4 /* do UDP checksum on loopback */
|
||||
#define UDPCTL_STATS 5 /* UDP statistics */
|
||||
#define UDPCTL_RFC6056 6 /* RFC 6056 algorithm selection */
|
||||
#define UDPCTL_MAXID 7
|
||||
|
||||
#define UDPCTL_NAMES { \
|
||||
|
@ -85,7 +84,6 @@ struct udpiphdr {
|
|||
{ "recvspace", CTLTYPE_INT }, \
|
||||
{ "do_loopback_cksum", CTLTYPE_INT }, \
|
||||
{ "stats", CTLTYPE_STRUCT }, \
|
||||
{ "rfc6056", CTLTYPE_INT }, \
|
||||
}
|
||||
|
||||
#ifdef _KERNEL
|
||||
|
|
375
sys/sys/socket.h
375
sys/sys/socket.h
|
@ -120,10 +120,22 @@ typedef _BSD_SSIZE_T_ ssize_t;
|
|||
#define SO_ACCEPTCONN 0x0002 /* socket has had listen() */
|
||||
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
|
||||
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
|
||||
#define SO_TYPE 0x0010 /* get socket type */
|
||||
#define SO_DONTROUTE 0x0010 /* just use interface addresses */
|
||||
#define SO_BROADCAST 0x0020 /* permit sending of broadcast msgs */
|
||||
#define SO_USELOOPBACK 0x0040 /* bypass hardware when possible */
|
||||
#define SO_LINGER 0x0080 /* linger on close if data present */
|
||||
#define SO_OOBINLINE 0x0100 /* leave received OOB data in line */
|
||||
#define SO_REUSEPORT 0x0200 /* allow local address & port reuse */
|
||||
/* SO_OTIMESTAMP 0x0400 */
|
||||
#define SO_NOSIGPIPE 0x0800 /* no SIGPIPE from EPIPE */
|
||||
#define SO_ACCEPTFILTER 0x1000 /* there is an accept filter */
|
||||
#define SO_TIMESTAMP 0x2000 /* timestamp received dgram traffic */
|
||||
|
||||
#ifdef __minix
|
||||
#define SO_PASSCRED 0x100000
|
||||
#define SO_PEERCRED 0x200000
|
||||
#endif
|
||||
|
||||
#define SO_PASSCRED 0x0012
|
||||
#define SO_PEERCRED 0x0014
|
||||
|
||||
/*
|
||||
* Additional options, not kept in so_options.
|
||||
|
@ -135,8 +147,27 @@ typedef _BSD_SSIZE_T_ ssize_t;
|
|||
/* SO_OSNDTIMEO 0x1005 */
|
||||
/* SO_ORCVTIMEO 0x1006 */
|
||||
#define SO_ERROR 0x1007 /* get error status and clear */
|
||||
#define SO_TYPE 0x1008 /* get socket type */
|
||||
#define SO_OVERFLOWED 0x1009 /* datagrams: return packets dropped */
|
||||
|
||||
#define SO_NOHEADER 0x100a /* user supplies no header to kernel;
|
||||
* kernel removes header and supplies
|
||||
* payload
|
||||
*/
|
||||
#define SO_SNDTIMEO 0x100b /* send timeout */
|
||||
#define SO_RCVTIMEO 0x100c /* receive timeout */
|
||||
/*
|
||||
* Structure used for manipulating linger option.
|
||||
*/
|
||||
struct linger {
|
||||
int l_onoff; /* option on/off */
|
||||
int l_linger; /* linger time in seconds */
|
||||
};
|
||||
|
||||
struct accept_filter_arg {
|
||||
char af_name[16];
|
||||
char af_arg[256-16];
|
||||
};
|
||||
|
||||
/*
|
||||
* Level number for (get/set)sockopt() to apply to socket itself.
|
||||
|
@ -165,7 +196,7 @@ typedef _BSD_SSIZE_T_ ssize_t;
|
|||
#define AF_LAT 14 /* LAT */
|
||||
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
||||
#define AF_APPLETALK 16 /* Apple Talk */
|
||||
#define AF_ROUTE 17 /* Internal Routing Protocol */
|
||||
#define AF_OROUTE 17 /* Internal Routing Protocol */
|
||||
#define AF_LINK 18 /* Link layer interface */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
|
||||
|
@ -191,44 +222,44 @@ typedef _BSD_SSIZE_T_ ssize_t;
|
|||
#endif
|
||||
#define AF_BLUETOOTH 31 /* Bluetooth: HCI, SCO, L2CAP, RFCOMM */
|
||||
#define AF_IEEE80211 32 /* IEEE80211 */
|
||||
|
||||
#define AF_MAX 33
|
||||
|
||||
#ifndef gid_t
|
||||
typedef __gid_t gid_t; /* group id */
|
||||
#define gid_t __gid_t
|
||||
#endif
|
||||
|
||||
#ifndef uid_t
|
||||
typedef __uid_t uid_t; /* user id */
|
||||
#define uid_t __uid_t
|
||||
#endif
|
||||
|
||||
#if defined(__minix) && !defined(_STANDALONE)
|
||||
#include <sys/ucred.h>
|
||||
#endif
|
||||
#define AF_MPLS 33 /* MultiProtocol Label Switching */
|
||||
#define AF_ROUTE 34 /* Internal Routing Protocol */
|
||||
#define AF_MAX 35
|
||||
|
||||
/*
|
||||
* Structure used by kernel to store most
|
||||
* addresses.
|
||||
*/
|
||||
struct sockaddr
|
||||
{
|
||||
sa_family_t sa_family;
|
||||
char sa_data[8]; /* Big enough for sockaddr_in */
|
||||
struct sockaddr {
|
||||
__uint8_t sa_len; /* total length */
|
||||
sa_family_t sa_family; /* address family */
|
||||
char sa_data[14]; /* actually longer; address value */
|
||||
};
|
||||
|
||||
#if defined(_KERNEL)
|
||||
/*
|
||||
* Structure used by kernel to pass protocol
|
||||
* information in raw sockets.
|
||||
*/
|
||||
struct sockproto {
|
||||
u_short sp_family; /* address family */
|
||||
u_short sp_protocol; /* protocol */
|
||||
};
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#if 1
|
||||
/*
|
||||
* RFC 2553: protocol-independent placeholder for socket addresses
|
||||
*/
|
||||
#define _SS_MAXSIZE 128
|
||||
#define _SS_ALIGNSIZE (sizeof(__int64_t))
|
||||
#define _SS_PAD1SIZE (_SS_ALIGNSIZE - 1)
|
||||
#define _SS_PAD2SIZE (_SS_MAXSIZE - 1 - \
|
||||
#define _SS_PAD1SIZE (_SS_ALIGNSIZE - 2)
|
||||
#define _SS_PAD2SIZE (_SS_MAXSIZE - 2 - \
|
||||
_SS_PAD1SIZE - _SS_ALIGNSIZE)
|
||||
|
||||
#if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||
struct sockaddr_storage {
|
||||
__uint8_t ss_len; /* address length */
|
||||
sa_family_t ss_family; /* address family */
|
||||
char __ss_pad1[_SS_PAD1SIZE];
|
||||
__int64_t __ss_align;/* force desired structure storage alignment */
|
||||
|
@ -237,6 +268,7 @@ struct sockaddr_storage {
|
|||
#define sstosa(__ss) ((struct sockaddr *)(__ss))
|
||||
#define sstocsa(__ss) ((const struct sockaddr *)(__ss))
|
||||
#endif /* _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||
#endif /* 1 */
|
||||
|
||||
/*
|
||||
* Protocol families, same as address families for now.
|
||||
|
@ -244,7 +276,6 @@ struct sockaddr_storage {
|
|||
#define PF_UNSPEC AF_UNSPEC
|
||||
#define PF_LOCAL AF_LOCAL
|
||||
#define PF_UNIX PF_LOCAL /* backward compatibility */
|
||||
#define PF_FILE PF_LOCAL /* Minix compatibility */
|
||||
#define PF_INET AF_INET
|
||||
#define PF_IMPLINK AF_IMPLINK
|
||||
#define PF_PUP AF_PUP
|
||||
|
@ -287,6 +318,160 @@ struct sockaddr_storage {
|
|||
|
||||
#define PF_MAX AF_MAX
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
|
||||
#ifndef gid_t
|
||||
typedef __gid_t gid_t; /* group id */
|
||||
#define gid_t __gid_t
|
||||
#endif
|
||||
|
||||
#ifndef uid_t
|
||||
typedef __uid_t uid_t; /* user id */
|
||||
#define uid_t __uid_t
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Socket credentials.
|
||||
*/
|
||||
struct sockcred {
|
||||
uid_t sc_uid; /* real user id */
|
||||
uid_t sc_euid; /* effective user id */
|
||||
gid_t sc_gid; /* real group id */
|
||||
gid_t sc_egid; /* effective group id */
|
||||
int sc_ngroups; /* number of supplemental groups */
|
||||
gid_t sc_groups[1]; /* variable length */
|
||||
};
|
||||
|
||||
/*
|
||||
* Compute size of a sockcred structure with groups.
|
||||
*/
|
||||
#define SOCKCREDSIZE(ngrps) \
|
||||
(sizeof(struct sockcred) + (sizeof(gid_t) * ((ngrps) - 1)))
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/*
|
||||
* Definitions for network related sysctl, CTL_NET.
|
||||
*
|
||||
* Second level is protocol family.
|
||||
* Third level is protocol number.
|
||||
*
|
||||
* Further levels are defined by the individual families below.
|
||||
*/
|
||||
#define NET_MAXID AF_MAX
|
||||
|
||||
#define CTL_NET_NAMES { \
|
||||
{ 0, 0 }, \
|
||||
{ "local", CTLTYPE_NODE }, \
|
||||
{ "inet", CTLTYPE_NODE }, \
|
||||
{ "implink", CTLTYPE_NODE }, \
|
||||
{ "pup", CTLTYPE_NODE }, \
|
||||
{ "chaos", CTLTYPE_NODE }, \
|
||||
{ "xerox_ns", CTLTYPE_NODE }, \
|
||||
{ "iso", CTLTYPE_NODE }, \
|
||||
{ "emca", CTLTYPE_NODE }, \
|
||||
{ "datakit", CTLTYPE_NODE }, \
|
||||
{ "ccitt", CTLTYPE_NODE }, \
|
||||
{ "ibm_sna", CTLTYPE_NODE }, \
|
||||
{ "decnet", CTLTYPE_NODE }, \
|
||||
{ "dec_dli", CTLTYPE_NODE }, \
|
||||
{ "lat", CTLTYPE_NODE }, \
|
||||
{ "hylink", CTLTYPE_NODE }, \
|
||||
{ "appletalk", CTLTYPE_NODE }, \
|
||||
{ "oroute", CTLTYPE_NODE }, \
|
||||
{ "link_layer", CTLTYPE_NODE }, \
|
||||
{ "xtp", CTLTYPE_NODE }, \
|
||||
{ "coip", CTLTYPE_NODE }, \
|
||||
{ "cnt", CTLTYPE_NODE }, \
|
||||
{ "rtip", CTLTYPE_NODE }, \
|
||||
{ "ipx", CTLTYPE_NODE }, \
|
||||
{ "inet6", CTLTYPE_NODE }, \
|
||||
{ "pip", CTLTYPE_NODE }, \
|
||||
{ "isdn", CTLTYPE_NODE }, \
|
||||
{ "natm", CTLTYPE_NODE }, \
|
||||
{ "arp", CTLTYPE_NODE }, \
|
||||
{ "key", CTLTYPE_NODE }, \
|
||||
{ "ieee80211", CTLTYPE_NODE }, \
|
||||
{ "mlps", CTLTYPE_NODE }, \
|
||||
{ "route", CTLTYPE_NODE }, \
|
||||
}
|
||||
|
||||
struct kinfo_pcb {
|
||||
__uint64_t ki_pcbaddr; /* PTR: pcb addr */
|
||||
__uint64_t ki_ppcbaddr; /* PTR: ppcb addr */
|
||||
__uint64_t ki_sockaddr; /* PTR: socket addr */
|
||||
|
||||
__uint32_t ki_family; /* INT: protocol family */
|
||||
__uint32_t ki_type; /* INT: socket type */
|
||||
__uint32_t ki_protocol; /* INT: protocol */
|
||||
__uint32_t ki_pflags; /* INT: generic protocol flags */
|
||||
|
||||
__uint32_t ki_sostate; /* INT: socket state */
|
||||
__uint32_t ki_prstate; /* INT: protocol state */
|
||||
__int32_t ki_tstate; /* INT: tcp state */
|
||||
__uint32_t ki_tflags; /* INT: tcp flags */
|
||||
|
||||
__uint64_t ki_rcvq; /* U_LONG: receive queue len */
|
||||
__uint64_t ki_sndq; /* U_LONG: send queue len */
|
||||
|
||||
union {
|
||||
struct sockaddr _kis_src; /* STRUCT: local address */
|
||||
char _kis_pad[256 + 8]; /* pad to max addr length */
|
||||
} ki_s;
|
||||
union {
|
||||
struct sockaddr _kid_dst; /* STRUCT: remote address */
|
||||
char _kid_pad[256 + 8]; /* pad to max addr length */
|
||||
} ki_d;
|
||||
|
||||
__uint64_t ki_inode; /* INO_T: fake inode number */
|
||||
__uint64_t ki_vnode; /* PTR: if associated with file */
|
||||
__uint64_t ki_conn; /* PTR: control block of peer */
|
||||
__uint64_t ki_refs; /* PTR: referencing socket */
|
||||
__uint64_t ki_nextref; /* PTR: link in refs list */
|
||||
};
|
||||
|
||||
#define ki_src ki_s._kis_src
|
||||
#define ki_dst ki_d._kid_dst
|
||||
|
||||
#define PCB_SLOP 20
|
||||
#define PCB_ALL 0
|
||||
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/*
|
||||
* PF_ROUTE - Routing table
|
||||
*
|
||||
* Three additional levels are defined:
|
||||
* Fourth: address family, 0 is wildcard
|
||||
* Fifth: type of info, defined below
|
||||
* Sixth: flag(s) to mask with for NET_RT_FLAGS
|
||||
*/
|
||||
#define NET_RT_DUMP 1 /* dump; may limit to a.f. */
|
||||
#define NET_RT_FLAGS 2 /* by flags, e.g. RESOLVING */
|
||||
#define NET_RT_OOIFLIST 3 /* old NET_RT_IFLIST (pre 1.5) */
|
||||
#define NET_RT_OIFLIST 4 /* survey interface list */
|
||||
#define NET_RT_IFLIST 5
|
||||
#define NET_RT_MAXID 6
|
||||
|
||||
#define CTL_NET_RT_NAMES { \
|
||||
{ 0, 0 }, \
|
||||
{ "dump", CTLTYPE_STRUCT }, \
|
||||
{ "flags", CTLTYPE_STRUCT }, \
|
||||
{ 0, 0 }, \
|
||||
{ 0, 0 }, \
|
||||
{ "iflist", CTLTYPE_STRUCT }, \
|
||||
}
|
||||
#endif /* _NETBSD_SOURCE */
|
||||
|
||||
/*
|
||||
* Maximum queue length specifiable by listen(2).
|
||||
*/
|
||||
#ifndef SOMAXCONN
|
||||
#define SOMAXCONN 128
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Message header for recvmsg and sendmsg calls.
|
||||
* Used value-result for recvmsg, value only for sendmsg.
|
||||
|
@ -304,7 +489,32 @@ struct msghdr {
|
|||
#define MSG_OOB 0x0001 /* process out-of-band data */
|
||||
#define MSG_PEEK 0x0002 /* peek at incoming message */
|
||||
#define MSG_DONTROUTE 0x0004 /* send without using routing tables */
|
||||
#define MSG_EOR 0x0008 /* complete record */
|
||||
#define MSG_EOR 0x0008 /* data completes record */
|
||||
#define MSG_TRUNC 0x0010 /* data discarded before delivery */
|
||||
#define MSG_CTRUNC 0x0020 /* control data lost before delivery */
|
||||
#define MSG_WAITALL 0x0040 /* wait for full request or error */
|
||||
#define MSG_DONTWAIT 0x0080 /* this message should be nonblocking */
|
||||
#define MSG_BCAST 0x0100 /* this message was rcvd using link-level brdcst */
|
||||
#define MSG_MCAST 0x0200 /* this message was rcvd using link-level mcast */
|
||||
#define MSG_NOSIGNAL 0x0400 /* do not generate SIGPIPE on EOF */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
#define MSG_CMSG_CLOEXEC 0x0800 /* close on exec receiving fd */
|
||||
#define MSG_NBIO 0x1000 /* use non-blocking I/O */
|
||||
#define MSG_WAITFORONE 0x2000 /* recvmmsg() wait for one message */
|
||||
|
||||
struct mmsghdr {
|
||||
struct msghdr msg_hdr;
|
||||
unsigned int msg_len;
|
||||
};
|
||||
#endif
|
||||
|
||||
/* Extra flags used internally only */
|
||||
#define MSG_USERFLAGS 0x0ffffff
|
||||
#define MSG_NAMEMBUF 0x1000000 /* msg_name is an mbuf */
|
||||
#define MSG_CONTROLMBUF 0x2000000 /* msg_control is an mbuf */
|
||||
#define MSG_IOVUSRSPACE 0x4000000 /* msg_iov is in user space */
|
||||
#define MSG_LENUSRSPACE 0x8000000 /* address length is in user space */
|
||||
|
||||
/*
|
||||
* Header for ancillary data objects in msg_control buffer.
|
||||
* Used for additional information with/about a datagram
|
||||
|
@ -318,37 +528,55 @@ struct cmsghdr {
|
|||
/* followed by u_char cmsg_data[]; */
|
||||
};
|
||||
|
||||
/* given pointer to struct cmsghdr, return pointer to data */
|
||||
#define CMSG_DATA(cmsg) \
|
||||
((u_char *)(void *)(cmsg) + __CMSG_ALIGN(sizeof(struct cmsghdr)))
|
||||
#define CCMSG_DATA(cmsg) \
|
||||
((const u_char *)(const void *)(cmsg) + \
|
||||
__CMSG_ALIGN(sizeof(struct cmsghdr)))
|
||||
|
||||
/*
|
||||
* Alignment requirement for CMSG struct manipulation.
|
||||
* This basically behaves the same as ALIGN() ARCH/include/param.h.
|
||||
* We declare it separately for two reasons:
|
||||
* (1) avoid dependency between machine/param.h, and (2) to sync with kernel's
|
||||
* idea of ALIGNBYTES at runtime.
|
||||
* without (2), we can't guarantee binary compatibility in case of future
|
||||
* changes in ALIGNBYTES.
|
||||
*/
|
||||
#define __CMSG_ALIGN(n) (((n) + __ALIGNBYTES) & ~__ALIGNBYTES)
|
||||
#ifdef _KERNEL
|
||||
#define CMSG_ALIGN(n) __CMSG_ALIGN(n)
|
||||
#endif
|
||||
|
||||
/* given pointer to struct cmsghdr, return pointer to next cmsghdr */
|
||||
#define CMSG_NXTHDR(mhdr, cmsg) \
|
||||
(((char *)(cmsg) + __CMSG_ALIGN((cmsg)->cmsg_len) + \
|
||||
__CMSG_ALIGN(sizeof(struct cmsghdr)) > \
|
||||
(((char *)(mhdr)->msg_control) + (mhdr)->msg_controllen)) ? \
|
||||
(struct cmsghdr *)0 : \
|
||||
(struct cmsghdr *)(void *)((char *)(cmsg) + \
|
||||
__CMSG_ALIGN((cmsg)->cmsg_len)))
|
||||
|
||||
/*
|
||||
* RFC 2292 requires to check msg_controllen, in case that the kernel returns
|
||||
* an empty list for some reasons.
|
||||
*/
|
||||
#define CMSG_FIRSTHDR(mhdr) \
|
||||
((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
|
||||
(struct cmsghdr *)(mhdr)->msg_control : \
|
||||
(struct cmsghdr *)NULL )
|
||||
(struct cmsghdr *)0)
|
||||
|
||||
#define CMSG_ALIGN(len) \
|
||||
( (len % sizeof(long) == 0) ? \
|
||||
len : \
|
||||
len + sizeof(long) - (len % sizeof(long)) )
|
||||
|
||||
#define CMSG_NXTHDR(mhdr, cmsg) \
|
||||
( ((cmsg) == NULL) ? CMSG_FIRSTHDR(mhdr) : \
|
||||
(((unsigned char *)(cmsg) + CMSG_ALIGN((cmsg)->cmsg_len) \
|
||||
+ CMSG_ALIGN(sizeof(struct cmsghdr)) > \
|
||||
(unsigned char *)((mhdr)->msg_control) + \
|
||||
(mhdr)->msg_controllen) ? \
|
||||
(struct cmsghdr *)NULL : \
|
||||
(struct cmsghdr *)((unsigned char *)(cmsg) + \
|
||||
CMSG_ALIGN((cmsg)->cmsg_len))) )
|
||||
|
||||
#define CMSG_DATA(cmsg) \
|
||||
( (unsigned char *)(cmsg) + CMSG_ALIGN(sizeof(struct cmsghdr)) )
|
||||
|
||||
#define CMSG_SPACE(l) (CMSG_ALIGN(sizeof(struct cmsghdr)) + CMSG_ALIGN(l))
|
||||
#define CMSG_LEN(l) (CMSG_ALIGN(sizeof(struct cmsghdr)) + (l))
|
||||
#define CMSG_SPACE(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(l))
|
||||
#define CMSG_LEN(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (l))
|
||||
|
||||
/* "Socket"-level control message types: */
|
||||
#define SCM_RIGHTS 0x01
|
||||
#define SCM_CREDENTIALS 0x02
|
||||
#define SCM_SECURITY 0x04
|
||||
|
||||
#define SCM_RIGHTS 0x01 /* access rights (array of int) */
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
/* 0x02 timestamp (struct timeval50) */
|
||||
#define SCM_CREDS 0x04 /* credentials (struct sockcred) */
|
||||
#define SCM_TIMESTAMP 0x08 /* timestamp (struct timeval) */
|
||||
#endif
|
||||
|
||||
/*
|
||||
* Types of socket shutdown(2).
|
||||
|
@ -359,9 +587,31 @@ struct cmsghdr {
|
|||
|
||||
#include <sys/cdefs.h>
|
||||
|
||||
#ifdef _KERNEL
|
||||
static inline socklen_t
|
||||
sockaddr_getlen(const struct sockaddr *sa)
|
||||
{
|
||||
return sa->sa_len;
|
||||
}
|
||||
|
||||
__BEGIN_DECLS
|
||||
int __cmsg_alignbytes(void);
|
||||
struct sockaddr *sockaddr_copy(struct sockaddr *, socklen_t,
|
||||
const struct sockaddr *);
|
||||
struct sockaddr *sockaddr_externalize(struct sockaddr *, socklen_t,
|
||||
const struct sockaddr *);
|
||||
struct sockaddr *sockaddr_alloc(sa_family_t, socklen_t, int);
|
||||
const void *sockaddr_const_addr(const struct sockaddr *, socklen_t *);
|
||||
void *sockaddr_addr(struct sockaddr *, socklen_t *);
|
||||
const struct sockaddr *sockaddr_any(const struct sockaddr *);
|
||||
const struct sockaddr *sockaddr_any_by_family(int);
|
||||
const void *sockaddr_anyaddr(const struct sockaddr *, socklen_t *);
|
||||
int sockaddr_cmp(const struct sockaddr *, const struct sockaddr *);
|
||||
struct sockaddr *sockaddr_dup(const struct sockaddr *, int);
|
||||
void sockaddr_free(struct sockaddr *);
|
||||
__END_DECLS
|
||||
#endif /* _KERNEL */
|
||||
|
||||
#ifndef _KERNEL
|
||||
|
||||
__BEGIN_DECLS
|
||||
int accept(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
|
@ -371,6 +621,8 @@ int getpeername(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
|||
int getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
int getsockopt(int, int, int, void *__restrict, socklen_t * __restrict);
|
||||
int listen(int, int);
|
||||
int paccept(int, struct sockaddr * __restrict, socklen_t * __restrict,
|
||||
const sigset_t * __restrict, int);
|
||||
ssize_t recv(int, void *, size_t, int);
|
||||
ssize_t recvfrom(int, void *__restrict, size_t, int,
|
||||
struct sockaddr * __restrict, socklen_t * __restrict);
|
||||
|
@ -382,9 +634,20 @@ ssize_t sendmsg(int, const struct msghdr *, int);
|
|||
int setsockopt(int, int, int, const void *, socklen_t);
|
||||
int shutdown(int, int);
|
||||
int sockatmark(int);
|
||||
int socket(int, int, int);
|
||||
int socket(int, int, int)
|
||||
#if !defined(__LIBC12_SOURCE__) && !defined(_STANDALONE)
|
||||
__RENAME(__socket30)
|
||||
#endif
|
||||
;
|
||||
int socketpair(int, int, int, int *);
|
||||
__END_DECLS
|
||||
|
||||
#if defined(_NETBSD_SOURCE)
|
||||
int sendmmsg(int, struct mmsghdr *, unsigned int, unsigned int);
|
||||
struct timespec;
|
||||
int recvmmsg(int, struct mmsghdr *, unsigned int, unsigned int,
|
||||
struct timespec *);
|
||||
#endif
|
||||
__END_DECLS
|
||||
#endif /* !_KERNEL */
|
||||
|
||||
#endif /* !_SYS_SOCKET_H_ */
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include <stdlib.h>
|
||||
#include <string.h>
|
||||
#include <sys/socket.h>
|
||||
#include <sys/ucred.h>
|
||||
#include <sys/stat.h>
|
||||
#include <sys/time.h>
|
||||
#include <sys/types.h>
|
||||
|
@ -306,8 +307,8 @@ void test_header(void)
|
|||
test_fail("SUN_LEN(&sun) should be 5");
|
||||
}
|
||||
|
||||
if (PF_UNIX != PF_LOCAL || PF_UNIX != PF_FILE || PF_UNIX != AF_UNIX) {
|
||||
test_fail("PF_UNIX, PF_LOCAL, PF_FILE, and AF_UNIX");
|
||||
if (PF_UNIX != PF_LOCAL || PF_UNIX != AF_UNIX) {
|
||||
test_fail("PF_UNIX, PF_LOCAL and AF_UNIX");
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -2242,7 +2243,7 @@ void test_scm_credentials(void)
|
|||
cmsg = CMSG_NXTHDR(&msg2, cmsg)) {
|
||||
|
||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||
cmsg->cmsg_type == SCM_CREDENTIALS) {
|
||||
cmsg->cmsg_type == SCM_CREDS) {
|
||||
|
||||
memcpy(&cred, CMSG_DATA(cmsg), sizeof(struct uucred));
|
||||
break;
|
||||
|
|
Loading…
Reference in a new issue