1*0a6a1f1dSLionel Sambuc /* $NetBSD: udp_var.h,v 1.40 2014/05/18 14:46:16 rmind Exp $ */ 27f2d47d8SEvgeniy Ivanov 37f2d47d8SEvgeniy Ivanov /* 47f2d47d8SEvgeniy Ivanov * Copyright (c) 1982, 1986, 1989, 1993 57f2d47d8SEvgeniy Ivanov * The Regents of the University of California. All rights reserved. 67f2d47d8SEvgeniy Ivanov * 77f2d47d8SEvgeniy Ivanov * Redistribution and use in source and binary forms, with or without 87f2d47d8SEvgeniy Ivanov * modification, are permitted provided that the following conditions 97f2d47d8SEvgeniy Ivanov * are met: 107f2d47d8SEvgeniy Ivanov * 1. Redistributions of source code must retain the above copyright 117f2d47d8SEvgeniy Ivanov * notice, this list of conditions and the following disclaimer. 127f2d47d8SEvgeniy Ivanov * 2. Redistributions in binary form must reproduce the above copyright 137f2d47d8SEvgeniy Ivanov * notice, this list of conditions and the following disclaimer in the 147f2d47d8SEvgeniy Ivanov * documentation and/or other materials provided with the distribution. 157f2d47d8SEvgeniy Ivanov * 3. Neither the name of the University nor the names of its contributors 167f2d47d8SEvgeniy Ivanov * may be used to endorse or promote products derived from this software 177f2d47d8SEvgeniy Ivanov * without specific prior written permission. 187f2d47d8SEvgeniy Ivanov * 197f2d47d8SEvgeniy Ivanov * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 207f2d47d8SEvgeniy Ivanov * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 217f2d47d8SEvgeniy Ivanov * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 227f2d47d8SEvgeniy Ivanov * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 237f2d47d8SEvgeniy Ivanov * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 247f2d47d8SEvgeniy Ivanov * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 257f2d47d8SEvgeniy Ivanov * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 267f2d47d8SEvgeniy Ivanov * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 277f2d47d8SEvgeniy Ivanov * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 287f2d47d8SEvgeniy Ivanov * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 297f2d47d8SEvgeniy Ivanov * SUCH DAMAGE. 307f2d47d8SEvgeniy Ivanov * 317f2d47d8SEvgeniy Ivanov * @(#)udp_var.h 8.1 (Berkeley) 6/10/93 327f2d47d8SEvgeniy Ivanov */ 337f2d47d8SEvgeniy Ivanov 347f2d47d8SEvgeniy Ivanov #ifndef _NETINET_UDP_VAR_H_ 357f2d47d8SEvgeniy Ivanov #define _NETINET_UDP_VAR_H_ 367f2d47d8SEvgeniy Ivanov 377f2d47d8SEvgeniy Ivanov /* 387f2d47d8SEvgeniy Ivanov * UDP kernel structures and variables. 397f2d47d8SEvgeniy Ivanov */ 407f2d47d8SEvgeniy Ivanov struct udpiphdr { 417f2d47d8SEvgeniy Ivanov struct ipovly ui_i; /* overlaid ip structure */ 427f2d47d8SEvgeniy Ivanov struct udphdr ui_u; /* udp header */ 437f2d47d8SEvgeniy Ivanov } __packed; 447f2d47d8SEvgeniy Ivanov #define ui_x1 ui_i.ih_x1 457f2d47d8SEvgeniy Ivanov #define ui_pr ui_i.ih_pr 467f2d47d8SEvgeniy Ivanov #define ui_len ui_i.ih_len 477f2d47d8SEvgeniy Ivanov #define ui_src ui_i.ih_src 487f2d47d8SEvgeniy Ivanov #define ui_dst ui_i.ih_dst 497f2d47d8SEvgeniy Ivanov #define ui_sport ui_u.uh_sport 507f2d47d8SEvgeniy Ivanov #define ui_dport ui_u.uh_dport 517f2d47d8SEvgeniy Ivanov #define ui_ulen ui_u.uh_ulen 527f2d47d8SEvgeniy Ivanov #define ui_sum ui_u.uh_sum 537f2d47d8SEvgeniy Ivanov 547f2d47d8SEvgeniy Ivanov /* 557f2d47d8SEvgeniy Ivanov * UDP statistics. 567f2d47d8SEvgeniy Ivanov * Each counter is an unsigned 64-bit value. 577f2d47d8SEvgeniy Ivanov */ 587f2d47d8SEvgeniy Ivanov #define UDP_STAT_IPACKETS 0 /* total input packets */ 597f2d47d8SEvgeniy Ivanov #define UDP_STAT_HDROPS 1 /* packet shorter than header */ 607f2d47d8SEvgeniy Ivanov #define UDP_STAT_BADSUM 2 /* checksum error */ 617f2d47d8SEvgeniy Ivanov #define UDP_STAT_BADLEN 3 /* data length larger than packet */ 627f2d47d8SEvgeniy Ivanov #define UDP_STAT_NOPORT 4 /* no socket on port */ 637f2d47d8SEvgeniy Ivanov #define UDP_STAT_NOPORTBCAST 5 /* of above, arrived as broadcast */ 647f2d47d8SEvgeniy Ivanov #define UDP_STAT_FULLSOCK 6 /* not delivered, input socket full */ 657f2d47d8SEvgeniy Ivanov #define UDP_STAT_PCBHASHMISS 7 /* input packets missing PCB hash */ 667f2d47d8SEvgeniy Ivanov #define UDP_STAT_OPACKETS 8 /* total output packets */ 677f2d47d8SEvgeniy Ivanov 687f2d47d8SEvgeniy Ivanov #define UDP_NSTATS 9 697f2d47d8SEvgeniy Ivanov 707f2d47d8SEvgeniy Ivanov /* 717f2d47d8SEvgeniy Ivanov * Names for UDP sysctl objects 727f2d47d8SEvgeniy Ivanov */ 737f2d47d8SEvgeniy Ivanov #define UDPCTL_CHECKSUM 1 /* checksum UDP packets */ 747f2d47d8SEvgeniy Ivanov #define UDPCTL_SENDSPACE 2 /* default send buffer */ 757f2d47d8SEvgeniy Ivanov #define UDPCTL_RECVSPACE 3 /* default recv buffer */ 767f2d47d8SEvgeniy Ivanov #define UDPCTL_LOOPBACKCKSUM 4 /* do UDP checksum on loopback */ 777f2d47d8SEvgeniy Ivanov #define UDPCTL_STATS 5 /* UDP statistics */ 787f2d47d8SEvgeniy Ivanov #define UDPCTL_MAXID 7 797f2d47d8SEvgeniy Ivanov 807f2d47d8SEvgeniy Ivanov #define UDPCTL_NAMES { \ 817f2d47d8SEvgeniy Ivanov { 0, 0 }, \ 827f2d47d8SEvgeniy Ivanov { "checksum", CTLTYPE_INT }, \ 837f2d47d8SEvgeniy Ivanov { "sendspace", CTLTYPE_INT }, \ 847f2d47d8SEvgeniy Ivanov { "recvspace", CTLTYPE_INT }, \ 857f2d47d8SEvgeniy Ivanov { "do_loopback_cksum", CTLTYPE_INT }, \ 867f2d47d8SEvgeniy Ivanov { "stats", CTLTYPE_STRUCT }, \ 877f2d47d8SEvgeniy Ivanov } 887f2d47d8SEvgeniy Ivanov 897f2d47d8SEvgeniy Ivanov #ifdef _KERNEL 90*0a6a1f1dSLionel Sambuc 917f2d47d8SEvgeniy Ivanov extern struct inpcbtable udbtable; 92*0a6a1f1dSLionel Sambuc extern const struct pr_usrreqs udp_usrreqs; 937f2d47d8SEvgeniy Ivanov 947f2d47d8SEvgeniy Ivanov void *udp_ctlinput(int, const struct sockaddr *, void *); 957f2d47d8SEvgeniy Ivanov int udp_ctloutput(int, struct socket *, struct sockopt *); 967f2d47d8SEvgeniy Ivanov void udp_init(void); 97*0a6a1f1dSLionel Sambuc void udp_init_common(void); 987f2d47d8SEvgeniy Ivanov void udp_input(struct mbuf *, ...); 997f2d47d8SEvgeniy Ivanov int udp_output(struct mbuf *, ...); 1007f2d47d8SEvgeniy Ivanov int udp_sysctl(int *, u_int, void *, size_t *, void *, size_t); 1017f2d47d8SEvgeniy Ivanov 1027f2d47d8SEvgeniy Ivanov int udp_input_checksum(int af, struct mbuf *, const struct udphdr *, int, 1037f2d47d8SEvgeniy Ivanov int); 1047f2d47d8SEvgeniy Ivanov void udp_statinc(u_int); 1057f2d47d8SEvgeniy Ivanov #endif /* _KERNEL */ 1067f2d47d8SEvgeniy Ivanov 1077f2d47d8SEvgeniy Ivanov #endif /* !_NETINET_UDP_VAR_H_ */ 108