18b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 28b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Copyright (c) 1982, 1986, 1993 38b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * The Regents of the University of California. All rights reserved. 48b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 58b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Redistribution and use in source and binary forms, with or without 68b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * modification, are permitted provided that the following conditions 78b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * are met: 88b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 1. Redistributions of source code must retain the above copyright 98b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * notice, this list of conditions and the following disclaimer. 108b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 2. Redistributions in binary form must reproduce the above copyright 118b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * notice, this list of conditions and the following disclaimer in the 128b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * documentation and/or other materials provided with the distribution. 135d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner * 3. Neither the name of the University nor the names of its contributors 148b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * may be used to endorse or promote products derived from this software 158b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * without specific prior written permission. 168b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 178b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * THIS SOFTWARE IS PROVIDED BY THE REGENTS AND CONTRIBUTORS ``AS IS'' AND 188b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 198b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 208b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * ARE DISCLAIMED. IN NO EVENT SHALL THE REGENTS OR CONTRIBUTORS BE LIABLE 218b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 228b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 238b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 248b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 258b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 268b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 278b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * SUCH DAMAGE. 288b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * 298b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * @(#)udp.h 8.1 (Berkeley) 6/10/93 308b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * udp.h,v 1.3 1994/08/21 05:27:41 paul Exp 318b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 328b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 338b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#ifndef _UDP_H_ 348b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define _UDP_H_ 358b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 368b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define UDP_TTL 0x60 378b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define UDP_UDPDATALEN 16192 388b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 398b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern struct socket *udp_last_so; 408b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 418b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 428b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Udp protocol header. 438b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Per RFC 768, September, 1981. 448b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 458b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct udphdr { 465d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner u_int16_t uh_sport; /* source port */ 475d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner u_int16_t uh_dport; /* destination port */ 488b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project int16_t uh_ulen; /* udp length */ 498b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_int16_t uh_sum; /* udp checksum */ 508b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 518b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 528b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 538b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * UDP kernel structures and variables. 548b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 558b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct udpiphdr { 568b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project struct ipovly ui_i; /* overlaid ip structure */ 578b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project struct udphdr ui_u; /* udp header */ 588b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 598b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_mbuf ui_i.ih_mbuf.mptr 608b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_x1 ui_i.ih_x1 618b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_pr ui_i.ih_pr 628b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_len ui_i.ih_len 638b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_src ui_i.ih_src 648b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_dst ui_i.ih_dst 658b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_sport ui_u.uh_sport 668b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_dport ui_u.uh_dport 678b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_ulen ui_u.uh_ulen 688b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define ui_sum ui_u.uh_sum 698b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 705d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef LOG_ENABLED 718b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct udpstat { 728b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* input statistics: */ 738b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_ipackets; /* total input packets */ 748b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_hdrops; /* packet shorter than header */ 758b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_badsum; /* checksum error */ 768b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_badlen; /* data length larger than packet */ 778b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_noport; /* no socket on port */ 788b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_noportbcast; /* of above, arrived as broadcast */ 798b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_fullsock; /* not delivered, input socket full */ 808b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udpps_pcbcachemiss; /* input packets missing pcb cache */ 818b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project /* output statistics: */ 828b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project u_long udps_opackets; /* total output packets */ 838b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project}; 845d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 858b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 868b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project/* 878b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project * Names for UDP sysctl objects 888b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project */ 898b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define UDPCTL_CHECKSUM 1 /* checksum UDP packets */ 908b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#define UDPCTL_MAXID 2 918b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 925d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#ifdef LOG_ENABLED 938b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern struct udpstat udpstat; 945d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner#endif 955d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner 968b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectextern struct socket udb; 978b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct mbuf; 988b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project 998b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid udp_init _P((void)); 1005d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnervoid udp_input _P((register struct mbuf *, int)); 1015d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint udp_output _P((struct socket *, struct mbuf *, struct sockaddr_in *)); 1028b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectint udp_attach _P((struct socket *)); 1038b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectvoid udp_detach _P((struct socket *)); 1048b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Projectstruct socket * udp_listen _P((u_int, u_int32_t, u_int, int)); 1055d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turnerint udp_output2(struct socket *so, struct mbuf *m, 1065d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner struct sockaddr_in *saddr, struct sockaddr_in *daddr, 1075d8f37ad78fc66901af50c762029a501561f3b23David 'Digit' Turner int iptos); 1088b23a6c7e1aee255004dd19098d4c2462b61b849The Android Open Source Project#endif 109