1c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/* $NetBSD: sockmisc.h,v 1.7 2006/09/09 16:22:10 manu Exp $ */ 20a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 30a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* Id: sockmisc.h,v 1.9 2005/10/05 16:55:41 manubsd Exp */ 40a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 50a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* 60a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Copyright (C) 1995, 1996, 1997, and 1998 WIDE Project. 70a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * All rights reserved. 80a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 90a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * Redistribution and use in source and binary forms, with or without 100a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * modification, are permitted provided that the following conditions 110a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * are met: 120a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 1. Redistributions of source code must retain the above copyright 130a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * notice, this list of conditions and the following disclaimer. 140a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 2. Redistributions in binary form must reproduce the above copyright 150a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * notice, this list of conditions and the following disclaimer in the 160a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * documentation and/or other materials provided with the distribution. 170a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 3. Neither the name of the project nor the names of its contributors 180a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * may be used to endorse or promote products derived from this software 190a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * without specific prior written permission. 200a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * 210a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND 220a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 230a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 240a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE 250a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 260a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 270a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 280a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 290a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 300a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 310a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang * SUCH DAMAGE. 320a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang */ 330a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 340a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#ifndef _SOCKMISC_H 350a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#define _SOCKMISC_H 360a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 370a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangstruct netaddr { 38c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh union { 39c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh struct sockaddr sa; 40c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh struct sockaddr_in sin; 41c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh struct sockaddr_in6 sin6; 42c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh } sa; 430a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang unsigned long prefix; 440a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang}; 450a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 460a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern const int niflags; 470a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 48c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehextern int cmpsaddrwop __P((const struct sockaddr *, const struct sockaddr *)); 49c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehextern int cmpsaddrwild __P((const struct sockaddr *, const struct sockaddr *)); 50c91307af2622f6625525f3c1f9c954376df950adChia-chi Yehextern int cmpsaddrstrict __P((const struct sockaddr *, const struct sockaddr *)); 510a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 52c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh#ifdef ENABLE_NATT 53c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh#define CMPSADDR(saddr1, saddr2) cmpsaddrstrict((saddr1), (saddr2)) 54c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh#else 55c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh#define CMPSADDR(saddr1, saddr2) cmpsaddrwop((saddr1), (saddr2)) 56c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh#endif 570a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 580a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern struct sockaddr *getlocaladdr __P((struct sockaddr *)); 590a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 600a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern int recvfromto __P((int, void *, size_t, int, 610a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, socklen_t *, struct sockaddr *, unsigned int *)); 620a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern int sendfromto __P((int, const void *, size_t, 630a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang struct sockaddr *, struct sockaddr *, int)); 640a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 650a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern int setsockopt_bypass __P((int, int)); 660a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 670a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern struct sockaddr *newsaddr __P((int)); 680a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern struct sockaddr *dupsaddr __P((struct sockaddr *)); 690a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern char *saddr2str __P((const struct sockaddr *)); 700a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern char *saddrwop2str __P((const struct sockaddr *)); 710a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern char *saddr2str_fromto __P((const char *format, 720a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang const struct sockaddr *saddr, 730a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang const struct sockaddr *daddr)); 740a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern struct sockaddr *str2saddr __P((char *, char *)); 750a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern void mask_sockaddr __P((struct sockaddr *, const struct sockaddr *, 760a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang size_t)); 770a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 780a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang/* struct netaddr functions */ 790a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern char *naddrwop2str __P((const struct netaddr *naddr)); 800a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern char *naddrwop2str_fromto __P((const char *format, const struct netaddr *saddr, 810a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang const struct netaddr *daddr)); 820a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern int naddr_score(const struct netaddr *naddr, const struct sockaddr *saddr); 830a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 84c91307af2622f6625525f3c1f9c954376df950adChia-chi Yeh/* Some usefull functions for sockaddr port manipulations. */ 850a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern u_int16_t extract_port __P((const struct sockaddr *addr)); 860a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern u_int16_t *set_port __P((struct sockaddr *addr, u_int16_t new_port)); 870a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wangextern u_int16_t *get_port_ptr __P((struct sockaddr *addr)); 880a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang 890a1907d434839af6a9cb6329bbde60b237bf53dcChung-yih Wang#endif /* _SOCKMISC_H */ 90