<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_len = CMSG_LEN(sizeof(struct uucred));
|
||||||
cmsg->cmsg_level = SOL_SOCKET;
|
cmsg->cmsg_level = SOL_SOCKET;
|
||||||
cmsg->cmsg_type = SCM_CREDENTIALS;
|
cmsg->cmsg_type = SCM_CREDS;
|
||||||
memcpy(CMSG_DATA(cmsg), &data->cred, sizeof(struct uucred));
|
memcpy(CMSG_DATA(cmsg), &data->cred, sizeof(struct uucred));
|
||||||
|
|
||||||
return OK;
|
return OK;
|
||||||
|
|
|
@ -2,6 +2,7 @@
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <unistd.h>
|
#include <unistd.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/ucred.h>
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* get the effective user ID and effective group ID of a peer
|
* 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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= tcpconfp->nwtc_remaddr;
|
sin.sin_addr.s_addr= tcpconfp->nwtc_remaddr;
|
||||||
sin.sin_port= tcpconfp->nwtc_remport;
|
sin.sin_port= tcpconfp->nwtc_remport;
|
||||||
|
sin.sin_len = sizeof(sin);
|
||||||
|
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= udpopt->nwuo_remaddr;
|
sin.sin_addr.s_addr= udpopt->nwuo_remaddr;
|
||||||
sin.sin_port= udpopt->nwuo_remport;
|
sin.sin_port= udpopt->nwuo_remport;
|
||||||
|
sin.sin_len = sizeof(sin);
|
||||||
|
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= tcpconf->nwtc_locaddr ;
|
sin.sin_addr.s_addr= tcpconf->nwtc_locaddr ;
|
||||||
sin.sin_port= tcpconf->nwtc_locport;
|
sin.sin_port= tcpconf->nwtc_locport;
|
||||||
|
sin.sin_len= sizeof(sin);
|
||||||
|
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= udpopt->nwuo_locaddr ;
|
sin.sin_addr.s_addr= udpopt->nwuo_locaddr ;
|
||||||
sin.sin_port= udpopt->nwuo_locport;
|
sin.sin_port= udpopt->nwuo_locport;
|
||||||
|
sin.sin_len= sizeof(sin);
|
||||||
|
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= tcpconfp->nwtc_remaddr;
|
sin.sin_addr.s_addr= tcpconfp->nwtc_remaddr;
|
||||||
sin.sin_port= tcpconfp->nwtc_remport;
|
sin.sin_port= tcpconfp->nwtc_remport;
|
||||||
|
sin.sin_len= sizeof(sin);
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
if (len > sizeof(sin))
|
||||||
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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= udpoptp->nwuo_remaddr;
|
sin.sin_addr.s_addr= udpoptp->nwuo_remaddr;
|
||||||
sin.sin_port= udpoptp->nwuo_remport;
|
sin.sin_port= udpoptp->nwuo_remport;
|
||||||
|
sin.sin_len= sizeof(sin);
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
if (len > sizeof(sin))
|
||||||
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_family= AF_INET;
|
||||||
sin.sin_addr.s_addr= io_hdrp->uih_src_addr;
|
sin.sin_addr.s_addr= io_hdrp->uih_src_addr;
|
||||||
sin.sin_port= io_hdrp->uih_src_port;
|
sin.sin_port= io_hdrp->uih_src_port;
|
||||||
|
sin.sin_len= sizeof(sin);
|
||||||
len= *address_len;
|
len= *address_len;
|
||||||
if (len > sizeof(sin))
|
if (len > sizeof(sin))
|
||||||
len= sizeof(sin);
|
len= sizeof(sin);
|
||||||
|
|
|
@ -2,7 +2,7 @@
|
||||||
#include "namespace.h"
|
#include "namespace.h"
|
||||||
|
|
||||||
#ifdef __weak_alias
|
#ifdef __weak_alias
|
||||||
__weak_alias(socket, _socket)
|
__weak_alias(socket, __socket30)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
#include <errno.h>
|
#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 <sys/resource.h>
|
||||||
|
|
||||||
#include <netinet/in.h>
|
#include <netinet/in.h>
|
||||||
#ifndef __minix
|
|
||||||
#include <netinet/in_systm.h>
|
#include <netinet/in_systm.h>
|
||||||
#include <netinet/ip.h>
|
#include <netinet/ip.h>
|
||||||
#endif
|
|
||||||
|
|
||||||
#define FTP_NAMES
|
#define FTP_NAMES
|
||||||
#include <arpa/ftp.h>
|
#include <arpa/ftp.h>
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
INCSDIR= /usr/include/netinet
|
INCSDIR= /usr/include/netinet
|
||||||
|
|
||||||
INCS+= in.h tcp.h
|
INCS+= in.h tcp.h in_systm.h ip.h
|
||||||
|
|
||||||
.include <bsd.kinc.mk>
|
.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
|
* Copyright (c) 1982, 1986, 1990, 1993
|
||||||
|
@ -234,14 +234,6 @@ struct in_addr {
|
||||||
/*
|
/*
|
||||||
* Socket address, internet style.
|
* 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 {
|
struct sockaddr_in {
|
||||||
uint8_t sin_len;
|
uint8_t sin_len;
|
||||||
sa_family_t sin_family;
|
sa_family_t sin_family;
|
||||||
|
@ -249,11 +241,9 @@ struct sockaddr_in {
|
||||||
struct in_addr sin_addr;
|
struct in_addr sin_addr;
|
||||||
__int8_t sin_zero[8];
|
__int8_t sin_zero[8];
|
||||||
};
|
};
|
||||||
#endif /* !__minix */
|
|
||||||
|
|
||||||
#define INET_ADDRSTRLEN 16
|
#define INET_ADDRSTRLEN 16
|
||||||
|
|
||||||
#ifndef __minix
|
|
||||||
/*
|
/*
|
||||||
* Structure used to describe IP options.
|
* Structure used to describe IP options.
|
||||||
* Used to store options internally, to pass them to a process,
|
* 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 */
|
__int8_t ip_opts[40]; /* actually variable in size */
|
||||||
#endif
|
#endif
|
||||||
};
|
};
|
||||||
#endif /* __minix */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Options for use with [gs]etsockopt at the IP level.
|
* Options for use with [gs]etsockopt at the IP level.
|
||||||
* First word of comment is data type; bool is stored in int.
|
* 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_OPTIONS 1 /* buf/ip_opts; set/get IP options */
|
||||||
#define IP_HDRINCL 2 /* int; header is included with data */
|
#define IP_HDRINCL 2 /* int; header is included with data */
|
||||||
#define IP_TOS 3 /* int; IP type of service and preced. */
|
#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_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_TTL 10 /* u_char; set/get IP multicast ttl */
|
||||||
#define IP_MULTICAST_LOOP 11 /* u_char; set/get IP multicast loopback */
|
#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_ADD_MEMBERSHIP 12 /* ip_mreq; add an IP group membership */
|
||||||
#define IP_DROP_MEMBERSHIP 13 /* ip_mreq; drop 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_PORTRANGE 19 /* int; range to use for ephemeral port */
|
||||||
#define IP_RECVIF 20 /* bool; receive reception if w/dgram */
|
#define IP_RECVIF 20 /* bool; receive reception if w/dgram */
|
||||||
#define IP_ERRORMTU 21 /* int; get MTU of last xmit = EMSGSIZE */
|
#define IP_ERRORMTU 21 /* int; get MTU of last xmit = EMSGSIZE */
|
||||||
|
@ -299,16 +286,13 @@ struct ip_opts {
|
||||||
#endif
|
#endif
|
||||||
#define IP_RECVTTL 23 /* bool; receive IP TTL w/dgram */
|
#define IP_RECVTTL 23 /* bool; receive IP TTL w/dgram */
|
||||||
#define IP_MINTTL 24 /* minimum TTL for packet or drop */
|
#define IP_MINTTL 24 /* minimum TTL for packet or drop */
|
||||||
#endif /* !__minix */
|
|
||||||
|
|
||||||
#ifndef __minix
|
|
||||||
/*
|
/*
|
||||||
* Defaults and limits for options
|
* Defaults and limits for options
|
||||||
*/
|
*/
|
||||||
#define IP_DEFAULT_MULTICAST_TTL 1 /* normally limit m'casts to 1 hop */
|
#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_DEFAULT_MULTICAST_LOOP 1 /* normally hear sends if a member */
|
||||||
#define IP_MAX_MEMBERSHIPS 20 /* per socket; must fit in one mbuf */
|
#define IP_MAX_MEMBERSHIPS 20 /* per socket; must fit in one mbuf */
|
||||||
#endif /* !__minix */
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Argument structure for IP_ADD_MEMBERSHIP and IP_DROP_MEMBERSHIP.
|
* 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 */
|
struct in_addr imr_interface; /* local IP address of interface */
|
||||||
};
|
};
|
||||||
|
|
||||||
#ifndef __minix
|
|
||||||
/*
|
/*
|
||||||
* Argument for IP_PORTRANGE:
|
* Argument for IP_PORTRANGE:
|
||||||
* - which range to search when port is unspecified at bind() or connect()
|
* - which range to search when port is unspecified at bind() or connect()
|
||||||
|
@ -502,14 +485,12 @@ struct ip_mreq {
|
||||||
{ "stats", CTLTYPE_STRUCT }, \
|
{ "stats", CTLTYPE_STRUCT }, \
|
||||||
}
|
}
|
||||||
#endif /* _NETBSD_SOURCE */
|
#endif /* _NETBSD_SOURCE */
|
||||||
#endif /* __minix */
|
|
||||||
|
|
||||||
/* INET6 stuff */
|
/* INET6 stuff */
|
||||||
#define __KAME_NETINET_IN_H_INCLUDED_
|
#define __KAME_NETINET_IN_H_INCLUDED_
|
||||||
#include <netinet6/in6.h>
|
#include <netinet6/in6.h>
|
||||||
#undef __KAME_NETINET_IN_H_INCLUDED_
|
#undef __KAME_NETINET_IN_H_INCLUDED_
|
||||||
|
|
||||||
#ifndef __minix
|
|
||||||
#ifdef _KERNEL
|
#ifdef _KERNEL
|
||||||
/*
|
/*
|
||||||
* in_cksum_phdr:
|
* in_cksum_phdr:
|
||||||
|
@ -617,6 +598,5 @@ sockaddr_in_alloc(const struct in_addr *addr, in_port_t port, int flags)
|
||||||
return sa;
|
return sa;
|
||||||
}
|
}
|
||||||
#endif /* _KERNEL */
|
#endif /* _KERNEL */
|
||||||
#endif /* __minix */
|
|
||||||
|
|
||||||
#endif /* !_NETINET_IN_H_ */
|
#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
|
* Copyright (c) 1982, 1986, 1993
|
||||||
|
@ -37,29 +37,30 @@
|
||||||
#include <sys/featuretest.h>
|
#include <sys/featuretest.h>
|
||||||
|
|
||||||
#if defined(_NETBSD_SOURCE)
|
#if defined(_NETBSD_SOURCE)
|
||||||
|
#include <sys/types.h>
|
||||||
|
|
||||||
typedef u_int32_t tcp_seq;
|
typedef uint32_t tcp_seq;
|
||||||
/*
|
/*
|
||||||
* TCP header.
|
* TCP header.
|
||||||
* Per RFC 793, September, 1981.
|
* Per RFC 793, September, 1981.
|
||||||
* Updated by RFC 3168, September, 2001.
|
* Updated by RFC 3168, September, 2001.
|
||||||
*/
|
*/
|
||||||
struct tcphdr {
|
struct tcphdr {
|
||||||
u_int16_t th_sport; /* source port */
|
uint16_t th_sport; /* source port */
|
||||||
u_int16_t th_dport; /* destination port */
|
uint16_t th_dport; /* destination port */
|
||||||
tcp_seq th_seq; /* sequence number */
|
tcp_seq th_seq; /* sequence number */
|
||||||
tcp_seq th_ack; /* acknowledgement number */
|
tcp_seq th_ack; /* acknowledgement number */
|
||||||
#if BYTE_ORDER == LITTLE_ENDIAN
|
#if BYTE_ORDER == LITTLE_ENDIAN
|
||||||
/*LINTED non-portable bitfields*/
|
/*LINTED non-portable bitfields*/
|
||||||
u_int8_t th_x2:4, /* (unused) */
|
uint8_t th_x2:4, /* (unused) */
|
||||||
th_off:4; /* data offset */
|
th_off:4; /* data offset */
|
||||||
#endif
|
#endif
|
||||||
#if BYTE_ORDER == BIG_ENDIAN
|
#if BYTE_ORDER == BIG_ENDIAN
|
||||||
/*LINTED non-portable bitfields*/
|
/*LINTED non-portable bitfields*/
|
||||||
u_int8_t th_off:4, /* data offset */
|
uint8_t th_off:4, /* data offset */
|
||||||
th_x2:4; /* (unused) */
|
th_x2:4; /* (unused) */
|
||||||
#endif
|
#endif
|
||||||
u_int8_t th_flags;
|
uint8_t th_flags;
|
||||||
#define TH_FIN 0x01
|
#define TH_FIN 0x01
|
||||||
#define TH_SYN 0x02
|
#define TH_SYN 0x02
|
||||||
#define TH_RST 0x04
|
#define TH_RST 0x04
|
||||||
|
@ -68,9 +69,9 @@ struct tcphdr {
|
||||||
#define TH_URG 0x20
|
#define TH_URG 0x20
|
||||||
#define TH_ECE 0x40
|
#define TH_ECE 0x40
|
||||||
#define TH_CWR 0x80
|
#define TH_CWR 0x80
|
||||||
u_int16_t th_win; /* window */
|
uint16_t th_win; /* window */
|
||||||
u_int16_t th_sum; /* checksum */
|
uint16_t th_sum; /* checksum */
|
||||||
u_int16_t th_urp; /* urgent pointer */
|
uint16_t th_urp; /* urgent pointer */
|
||||||
} __packed;
|
} __packed;
|
||||||
|
|
||||||
#define TCPOPT_EOL 0
|
#define TCPOPT_EOL 0
|
||||||
|
@ -115,5 +116,18 @@ struct tcphdr {
|
||||||
* User-settable options (used with setsockopt).
|
* User-settable options (used with setsockopt).
|
||||||
*/
|
*/
|
||||||
#define TCP_NODELAY 1 /* don't delay send to coalesce packets */
|
#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_ */
|
#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
|
* Copyright (c) 1982, 1986, 1993
|
||||||
|
@ -48,7 +48,6 @@ struct udphdr {
|
||||||
|
|
||||||
/* socket options for UDP */
|
/* socket options for UDP */
|
||||||
#define UDP_ENCAP 100
|
#define UDP_ENCAP 100
|
||||||
#define UDP_RFC6056ALGO 200
|
|
||||||
|
|
||||||
/* Encapsulation types */
|
/* Encapsulation types */
|
||||||
#define UDP_ENCAP_ESPINUDP_NON_IKE 1 /* draft-ietf-ipsec-nat-t-ike-00/01 */
|
#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
|
* Copyright (c) 1982, 1986, 1989, 1993
|
||||||
|
@ -75,7 +75,6 @@ struct udpiphdr {
|
||||||
#define UDPCTL_RECVSPACE 3 /* default recv buffer */
|
#define UDPCTL_RECVSPACE 3 /* default recv buffer */
|
||||||
#define UDPCTL_LOOPBACKCKSUM 4 /* do UDP checksum on loopback */
|
#define UDPCTL_LOOPBACKCKSUM 4 /* do UDP checksum on loopback */
|
||||||
#define UDPCTL_STATS 5 /* UDP statistics */
|
#define UDPCTL_STATS 5 /* UDP statistics */
|
||||||
#define UDPCTL_RFC6056 6 /* RFC 6056 algorithm selection */
|
|
||||||
#define UDPCTL_MAXID 7
|
#define UDPCTL_MAXID 7
|
||||||
|
|
||||||
#define UDPCTL_NAMES { \
|
#define UDPCTL_NAMES { \
|
||||||
|
@ -85,7 +84,6 @@ struct udpiphdr {
|
||||||
{ "recvspace", CTLTYPE_INT }, \
|
{ "recvspace", CTLTYPE_INT }, \
|
||||||
{ "do_loopback_cksum", CTLTYPE_INT }, \
|
{ "do_loopback_cksum", CTLTYPE_INT }, \
|
||||||
{ "stats", CTLTYPE_STRUCT }, \
|
{ "stats", CTLTYPE_STRUCT }, \
|
||||||
{ "rfc6056", CTLTYPE_INT }, \
|
|
||||||
}
|
}
|
||||||
|
|
||||||
#ifdef _KERNEL
|
#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_ACCEPTCONN 0x0002 /* socket has had listen() */
|
||||||
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
|
#define SO_REUSEADDR 0x0004 /* allow local address reuse */
|
||||||
#define SO_KEEPALIVE 0x0008 /* keep connections alive */
|
#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.
|
* Additional options, not kept in so_options.
|
||||||
|
@ -135,8 +147,27 @@ typedef _BSD_SSIZE_T_ ssize_t;
|
||||||
/* SO_OSNDTIMEO 0x1005 */
|
/* SO_OSNDTIMEO 0x1005 */
|
||||||
/* SO_ORCVTIMEO 0x1006 */
|
/* SO_ORCVTIMEO 0x1006 */
|
||||||
#define SO_ERROR 0x1007 /* get error status and clear */
|
#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_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.
|
* 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_LAT 14 /* LAT */
|
||||||
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
#define AF_HYLINK 15 /* NSC Hyperchannel */
|
||||||
#define AF_APPLETALK 16 /* Apple Talk */
|
#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 */
|
#define AF_LINK 18 /* Link layer interface */
|
||||||
#if defined(_NETBSD_SOURCE)
|
#if defined(_NETBSD_SOURCE)
|
||||||
#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
|
#define pseudo_AF_XTP 19 /* eXpress Transfer Protocol (no AF) */
|
||||||
|
@ -191,44 +222,44 @@ typedef _BSD_SSIZE_T_ ssize_t;
|
||||||
#endif
|
#endif
|
||||||
#define AF_BLUETOOTH 31 /* Bluetooth: HCI, SCO, L2CAP, RFCOMM */
|
#define AF_BLUETOOTH 31 /* Bluetooth: HCI, SCO, L2CAP, RFCOMM */
|
||||||
#define AF_IEEE80211 32 /* IEEE80211 */
|
#define AF_IEEE80211 32 /* IEEE80211 */
|
||||||
|
#define AF_MPLS 33 /* MultiProtocol Label Switching */
|
||||||
#define AF_MAX 33
|
#define AF_ROUTE 34 /* Internal Routing Protocol */
|
||||||
|
#define AF_MAX 35
|
||||||
#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
|
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Structure used by kernel to store most
|
* Structure used by kernel to store most
|
||||||
* addresses.
|
* addresses.
|
||||||
*/
|
*/
|
||||||
struct sockaddr
|
struct sockaddr {
|
||||||
{
|
__uint8_t sa_len; /* total length */
|
||||||
sa_family_t sa_family;
|
sa_family_t sa_family; /* address family */
|
||||||
char sa_data[8]; /* Big enough for sockaddr_in */
|
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
|
* RFC 2553: protocol-independent placeholder for socket addresses
|
||||||
*/
|
*/
|
||||||
#define _SS_MAXSIZE 128
|
#define _SS_MAXSIZE 128
|
||||||
#define _SS_ALIGNSIZE (sizeof(__int64_t))
|
#define _SS_ALIGNSIZE (sizeof(__int64_t))
|
||||||
#define _SS_PAD1SIZE (_SS_ALIGNSIZE - 1)
|
#define _SS_PAD1SIZE (_SS_ALIGNSIZE - 2)
|
||||||
#define _SS_PAD2SIZE (_SS_MAXSIZE - 1 - \
|
#define _SS_PAD2SIZE (_SS_MAXSIZE - 2 - \
|
||||||
_SS_PAD1SIZE - _SS_ALIGNSIZE)
|
_SS_PAD1SIZE - _SS_ALIGNSIZE)
|
||||||
|
|
||||||
#if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
#if (_XOPEN_SOURCE - 0) >= 500 || defined(_NETBSD_SOURCE)
|
||||||
struct sockaddr_storage {
|
struct sockaddr_storage {
|
||||||
|
__uint8_t ss_len; /* address length */
|
||||||
sa_family_t ss_family; /* address family */
|
sa_family_t ss_family; /* address family */
|
||||||
char __ss_pad1[_SS_PAD1SIZE];
|
char __ss_pad1[_SS_PAD1SIZE];
|
||||||
__int64_t __ss_align;/* force desired structure storage alignment */
|
__int64_t __ss_align;/* force desired structure storage alignment */
|
||||||
|
@ -237,6 +268,7 @@ struct sockaddr_storage {
|
||||||
#define sstosa(__ss) ((struct sockaddr *)(__ss))
|
#define sstosa(__ss) ((struct sockaddr *)(__ss))
|
||||||
#define sstocsa(__ss) ((const struct sockaddr *)(__ss))
|
#define sstocsa(__ss) ((const struct sockaddr *)(__ss))
|
||||||
#endif /* _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
#endif /* _XOPEN_SOURCE >= 500 || _NETBSD_SOURCE */
|
||||||
|
#endif /* 1 */
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Protocol families, same as address families for now.
|
* Protocol families, same as address families for now.
|
||||||
|
@ -244,7 +276,6 @@ struct sockaddr_storage {
|
||||||
#define PF_UNSPEC AF_UNSPEC
|
#define PF_UNSPEC AF_UNSPEC
|
||||||
#define PF_LOCAL AF_LOCAL
|
#define PF_LOCAL AF_LOCAL
|
||||||
#define PF_UNIX PF_LOCAL /* backward compatibility */
|
#define PF_UNIX PF_LOCAL /* backward compatibility */
|
||||||
#define PF_FILE PF_LOCAL /* Minix compatibility */
|
|
||||||
#define PF_INET AF_INET
|
#define PF_INET AF_INET
|
||||||
#define PF_IMPLINK AF_IMPLINK
|
#define PF_IMPLINK AF_IMPLINK
|
||||||
#define PF_PUP AF_PUP
|
#define PF_PUP AF_PUP
|
||||||
|
@ -287,6 +318,160 @@ struct sockaddr_storage {
|
||||||
|
|
||||||
#define PF_MAX AF_MAX
|
#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.
|
* Message header for recvmsg and sendmsg calls.
|
||||||
* Used value-result for recvmsg, value only for sendmsg.
|
* 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_OOB 0x0001 /* process out-of-band data */
|
||||||
#define MSG_PEEK 0x0002 /* peek at incoming message */
|
#define MSG_PEEK 0x0002 /* peek at incoming message */
|
||||||
#define MSG_DONTROUTE 0x0004 /* send without using routing tables */
|
#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.
|
* Header for ancillary data objects in msg_control buffer.
|
||||||
* Used for additional information with/about a datagram
|
* Used for additional information with/about a datagram
|
||||||
|
@ -318,37 +528,55 @@ struct cmsghdr {
|
||||||
/* followed by u_char cmsg_data[]; */
|
/* 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) \
|
#define CMSG_FIRSTHDR(mhdr) \
|
||||||
((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
|
((mhdr)->msg_controllen >= sizeof(struct cmsghdr) ? \
|
||||||
(struct cmsghdr *)(mhdr)->msg_control : \
|
(struct cmsghdr *)(mhdr)->msg_control : \
|
||||||
(struct cmsghdr *)NULL )
|
(struct cmsghdr *)0)
|
||||||
|
|
||||||
#define CMSG_ALIGN(len) \
|
#define CMSG_SPACE(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + __CMSG_ALIGN(l))
|
||||||
( (len % sizeof(long) == 0) ? \
|
#define CMSG_LEN(l) (__CMSG_ALIGN(sizeof(struct cmsghdr)) + (l))
|
||||||
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))
|
|
||||||
|
|
||||||
/* "Socket"-level control message types: */
|
/* "Socket"-level control message types: */
|
||||||
#define SCM_RIGHTS 0x01
|
#define SCM_RIGHTS 0x01 /* access rights (array of int) */
|
||||||
#define SCM_CREDENTIALS 0x02
|
#if defined(_NETBSD_SOURCE)
|
||||||
#define SCM_SECURITY 0x04
|
/* 0x02 timestamp (struct timeval50) */
|
||||||
|
#define SCM_CREDS 0x04 /* credentials (struct sockcred) */
|
||||||
|
#define SCM_TIMESTAMP 0x08 /* timestamp (struct timeval) */
|
||||||
|
#endif
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* Types of socket shutdown(2).
|
* Types of socket shutdown(2).
|
||||||
|
@ -359,9 +587,31 @@ struct cmsghdr {
|
||||||
|
|
||||||
#include <sys/cdefs.h>
|
#include <sys/cdefs.h>
|
||||||
|
|
||||||
|
#ifdef _KERNEL
|
||||||
|
static inline socklen_t
|
||||||
|
sockaddr_getlen(const struct sockaddr *sa)
|
||||||
|
{
|
||||||
|
return sa->sa_len;
|
||||||
|
}
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__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
|
__END_DECLS
|
||||||
|
#endif /* _KERNEL */
|
||||||
|
|
||||||
|
#ifndef _KERNEL
|
||||||
|
|
||||||
__BEGIN_DECLS
|
__BEGIN_DECLS
|
||||||
int accept(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
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 getsockname(int, struct sockaddr * __restrict, socklen_t * __restrict);
|
||||||
int getsockopt(int, int, int, void *__restrict, socklen_t * __restrict);
|
int getsockopt(int, int, int, void *__restrict, socklen_t * __restrict);
|
||||||
int listen(int, int);
|
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 recv(int, void *, size_t, int);
|
||||||
ssize_t recvfrom(int, void *__restrict, size_t, int,
|
ssize_t recvfrom(int, void *__restrict, size_t, int,
|
||||||
struct sockaddr * __restrict, socklen_t * __restrict);
|
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 setsockopt(int, int, int, const void *, socklen_t);
|
||||||
int shutdown(int, int);
|
int shutdown(int, int);
|
||||||
int sockatmark(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 *);
|
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_ */
|
#endif /* !_SYS_SOCKET_H_ */
|
||||||
|
|
|
@ -45,6 +45,7 @@
|
||||||
#include <stdlib.h>
|
#include <stdlib.h>
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
#include <sys/socket.h>
|
#include <sys/socket.h>
|
||||||
|
#include <sys/ucred.h>
|
||||||
#include <sys/stat.h>
|
#include <sys/stat.h>
|
||||||
#include <sys/time.h>
|
#include <sys/time.h>
|
||||||
#include <sys/types.h>
|
#include <sys/types.h>
|
||||||
|
@ -306,8 +307,8 @@ void test_header(void)
|
||||||
test_fail("SUN_LEN(&sun) should be 5");
|
test_fail("SUN_LEN(&sun) should be 5");
|
||||||
}
|
}
|
||||||
|
|
||||||
if (PF_UNIX != PF_LOCAL || PF_UNIX != PF_FILE || PF_UNIX != AF_UNIX) {
|
if (PF_UNIX != PF_LOCAL || PF_UNIX != AF_UNIX) {
|
||||||
test_fail("PF_UNIX, PF_LOCAL, PF_FILE, and 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)) {
|
cmsg = CMSG_NXTHDR(&msg2, cmsg)) {
|
||||||
|
|
||||||
if (cmsg->cmsg_level == SOL_SOCKET &&
|
if (cmsg->cmsg_level == SOL_SOCKET &&
|
||||||
cmsg->cmsg_type == SCM_CREDENTIALS) {
|
cmsg->cmsg_type == SCM_CREDS) {
|
||||||
|
|
||||||
memcpy(&cred, CMSG_DATA(cmsg), sizeof(struct uucred));
|
memcpy(&cred, CMSG_DATA(cmsg), sizeof(struct uucred));
|
||||||
break;
|
break;
|
||||||
|
|
Loading…
Reference in a new issue