Blame ninfod/ninfod.h

Packit Service 6f2e62
/* $USAGI: ninfod.h,v 1.20 2002-12-19 15:51:16 yoshfuji Exp $ */
Packit Service 6f2e62
/*
Packit Service 6f2e62
 * Copyright (C) 2002 USAGI/WIDE Project.
Packit Service 6f2e62
 * All rights reserved.
Packit Service 6f2e62
 * 
Packit Service 6f2e62
 * Redistribution and use in source and binary forms, with or without
Packit Service 6f2e62
 * modification, are permitted provided that the following conditions
Packit Service 6f2e62
 * are met:
Packit Service 6f2e62
 * 1. Redistributions of source code must retain the above copyright
Packit Service 6f2e62
 *    notice, this list of conditions and the following disclaimer.
Packit Service 6f2e62
 * 2. Redistributions in binary form must reproduce the above copyright
Packit Service 6f2e62
 *    notice, this list of conditions and the following disclaimer in the
Packit Service 6f2e62
 *    documentation and/or other materials provided with the distribution.
Packit Service 6f2e62
 * 3. Neither the name of the project nor the names of its contributors
Packit Service 6f2e62
 *    may be used to endorse or promote products derived from this software
Packit Service 6f2e62
 *    without specific prior written permission.
Packit Service 6f2e62
 * 
Packit Service 6f2e62
 * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
Packit Service 6f2e62
 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
Packit Service 6f2e62
 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
Packit Service 6f2e62
 * ARE DISCLAIMED.  IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
Packit Service 6f2e62
 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
Packit Service 6f2e62
 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
Packit Service 6f2e62
 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
Packit Service 6f2e62
 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
Packit Service 6f2e62
 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
Packit Service 6f2e62
 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
Packit Service 6f2e62
 * SUCH DAMAGE.
Packit Service 6f2e62
 */
Packit Service 6f2e62
/*
Packit Service 6f2e62
 * Author:
Packit Service 6f2e62
 * 	YOSHIFUJI Hideaki <yoshfuji@linux-ipv6.org>
Packit Service 6f2e62
 */
Packit Service 6f2e62
Packit Service 6f2e62
/* definitions */
Packit Service 6f2e62
#define NINFOD			"ninfod"
Packit Service 6f2e62
#define NINFOD_PIDFILE		"/var/run/ninfod.pid"
Packit Service 6f2e62
Packit Service 6f2e62
#define	MAX_ANYCAST_DELAY_TIME	1000000.0	/* 1 sec */
Packit Service 6f2e62
Packit Service 6f2e62
#define MAX_DNSLABEL_SIZE	63
Packit Service 6f2e62
#define MAX_DNSNAME_SIZE	255
Packit Service 6f2e62
#define MAX_QUERY_SIZE		(sizeof(struct icmp6_nodeinfo)+MAX_DNSNAME_SIZE+2)
Packit Service 6f2e62
#define MAX_REPLY_SIZE		1280-sizeof(struct ip6_hdr)
Packit Service 6f2e62
Packit Service 6f2e62
#define MAX_SUPTYPES		32
Packit Service 6f2e62
Packit Service 6f2e62
#define CHECKANDFILL_ARGS	struct packetcontext *p,\
Packit Service 6f2e62
				char *subject, size_t subjlen,	\
Packit Service 6f2e62
				unsigned int flags,		\
Packit Service 6f2e62
				unsigned int *subj_if,		\
Packit Service 6f2e62
				int reply
Packit Service 6f2e62
#define INIT_ARGS		\
Packit Service 6f2e62
				int forced
Packit Service 6f2e62
Packit Service 6f2e62
struct packetcontext {
Packit Service 6f2e62
	/* socket */
Packit Service 6f2e62
	int sock;
Packit Service 6f2e62
Packit Service 6f2e62
	/* query info */
Packit Service 6f2e62
	struct sockaddr_storage addr;
Packit Service 6f2e62
	socklen_t addrlen;
Packit Service 6f2e62
	struct in6_pktinfo pktinfo;
Packit Service 6f2e62
	char query[MAX_QUERY_SIZE];
Packit Service 6f2e62
	int querylen;
Packit Service 6f2e62
Packit Service 6f2e62
	/* reply info */
Packit Service 6f2e62
	struct icmp6_nodeinfo reply;	/* common */
Packit Service 6f2e62
	char *replydata;		/* data */
Packit Service 6f2e62
	int replydatalen;
Packit Service 6f2e62
Packit Service 6f2e62
	unsigned int delay;		/* (random) delay */
Packit Service 6f2e62
};
Packit Service 6f2e62
Packit Service 6f2e62
/* variables */
Packit Service 6f2e62
extern int opt_v;		/* ninfod.c */
Packit Service 6f2e62
extern int daemonized;		/* ninfod.c */
Packit Service 6f2e62
extern int sock;		/* ninfod.c */
Packit Service 6f2e62
extern int initialized;		/* ninfod_core.c */
Packit Service 6f2e62
Packit Service 6f2e62
/* ninfod.c* */
Packit Service 6f2e62
int ni_recv(struct packetcontext *p);
Packit Service 6f2e62
int ni_send(struct packetcontext *p);
Packit Service 6f2e62
Packit Service 6f2e62
/* ninfod_core.c */
Packit Service 6f2e62
#if ENABLE_DEBUG
Packit Service 6f2e62
void stderrlog(int priority, char *format, ...);
Packit Service 6f2e62
# define DEBUG(pri, fmt, args...)	do {									\
Packit Service 6f2e62
						int saved_errno = errno;					\
Packit Service 6f2e62
						if (opt_v || pri != LOG_DEBUG) {				\
Packit Service 6f2e62
							if (daemonized) {					\
Packit Service 6f2e62
								syslog(pri, fmt, ## args);			\
Packit Service 6f2e62
							} else {						\
Packit Service 6f2e62
								stderrlog(pri, fmt, ## args);			\
Packit Service 6f2e62
							}							\
Packit Service 6f2e62
						}								\
Packit Service 6f2e62
						errno = saved_errno;						\
Packit Service 6f2e62
					} while(0)
Packit Service 6f2e62
#else
Packit Service 6f2e62
# define DEBUG(pri, fmt, args...)	do { ; } while(0)
Packit Service 6f2e62
#endif
Packit Service 6f2e62
Packit Service 6f2e62
#define ni_malloc(size)	({										\
Packit Service 6f2e62
				size_t _size = (size);							\
Packit Service 6f2e62
				void *p = malloc(_size);						\
Packit Service 6f2e62
				DEBUG(LOG_DEBUG, "%s(): malloc(%zu) = %p\n", __func__, _size, p);	\
Packit Service 6f2e62
				p;									\
Packit Service 6f2e62
			})
Packit Service 6f2e62
#define ni_free(p)	({										\
Packit Service 6f2e62
				void *_p = (p);								\
Packit Service 6f2e62
				int saved_errno = errno;						\
Packit Service 6f2e62
				DEBUG(LOG_DEBUG, "%s(): free(%p)\n", __func__, _p);			\
Packit Service 6f2e62
				free(_p);								\
Packit Service 6f2e62
				errno = saved_errno;							\
Packit Service 6f2e62
			})
Packit Service 6f2e62
Packit Service 6f2e62
void init_core(int forced);
Packit Service 6f2e62
int pr_nodeinfo(struct packetcontext *p);
Packit Service 6f2e62
Packit Service 6f2e62
int pr_nodeinfo_unknown(CHECKANDFILL_ARGS);
Packit Service 6f2e62
int pr_nodeinfo_refused(CHECKANDFILL_ARGS);
Packit Service 6f2e62
int pr_nodeinfo_noop(CHECKANDFILL_ARGS);
Packit Service 6f2e62
void init_nodeinfo_suptypes(INIT_ARGS);
Packit Service 6f2e62
int pr_nodeinfo_suptypes(CHECKANDFILL_ARGS);
Packit Service 6f2e62
Packit Service 6f2e62
/* ninfod_addrs.c */
Packit Service 6f2e62
void init_nodeinfo_ipv6addr(INIT_ARGS);
Packit Service 6f2e62
int pr_nodeinfo_ipv6addr(CHECKANDFILL_ARGS);
Packit Service 6f2e62
void init_nodeinfo_ipv4addr(INIT_ARGS);
Packit Service 6f2e62
int pr_nodeinfo_ipv4addr(CHECKANDFILL_ARGS);
Packit Service 6f2e62
Packit Service 6f2e62
/* ninfod_name.c */
Packit Service 6f2e62
int check_nigroup(const struct in6_addr *addr);
Packit Service 6f2e62
void init_nodeinfo_nodename(INIT_ARGS);
Packit Service 6f2e62
int pr_nodeinfo_nodename(CHECKANDFILL_ARGS);
Packit Service 6f2e62