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