// ndppd - NDP Proxy Daemon
// Copyright (C) 2011 Daniel Adolfsson
//
// This program is free software: you can redistribute it and/or modify
// it under the terms of the GNU General Public License as published by
// the Free Software Foundation, either version 3 of the License, or
// (at your option) any later version.
//
// This program is distributed in the hope that it will be useful,
// but WITHOUT ANY WARRANTY; without even the implied warranty of
// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
// GNU General Public License for more details.
//
// You should have received a copy of the GNU General Public License
// along with this program. If not, see .
#ifndef __NDPPD_H
#define __NDPPD_H
#include
#define __NDPPD_NS_BEGIN namespace ndppd {
#define __NDPPD_NS_END }
#define NDPPD_VERSION "0.1-alpha"
#include "log.h"
#include "ptr.h"
#include "conf.h"
#include "address.h"
#include "iface.h"
#include "proxy.h"
#include "session.h"
#include "rule.h"
#if 0
#define NDPPD_LOG_FATAL 10
#define NDPPD_LOG_ERROR 20
#define NDPPD_LOG_WARNING 30
#define NDPPD_LOG_BUG 40
#define NDPPD_LOG_NOTICE 50
#define NDPPD_LOG_INFO 60
#define NDPPD_LOG_DEBUG 70
#ifdef DEBUG
#define DBG(...) log_printf(NDPPD_LOG_DEBUG, __VA_ARGS__)
#else
#define DBG(...)
#endif
#define ERR(...) log_printf(NDPPD_LOG_ERROR, __VA_ARGS__)
#define WRN(...) log_printf(NDPPD_LOG_WARNING, __VA_ARGS__)
#define BUG(...) log_printf(NDPPD_LOG_BUG, __VA_ARGS__)
#define NFO(...) log_printf(NDPPD_LOG_INFO, __VA_ARGS__)
#define NCE(...) log_printf(NDPPD_LOG_NOTICE, __VA_ARGS__)
#define FTL(...) log_printf(NDPPD_LOG_FATAL, __VA_ARGS__)
#ifndef NULL
#define NULL ((void *)0)
#endif
#ifndef null
#define null 0
#endif
#ifndef TRUE
#define TRUE 1
#endif
#ifndef FALSE
#define FALSE 0
#endif
typedef struct net_socket net_socket_t;
typedef struct proxy proxy_t;
typedef struct rule rule_t;
typedef struct list list_t;
typedef struct list_item list_item_t;
typedef struct ndpsn ndpsn_t;
struct list
{
list_item_t *first, *last;
int count;
};
struct list_item
{
list_t *list;
list_item_t *next, *prev;
void *ptr;
};
struct net_socket
{
int fd;
char iface[64];
list_t ndpsn_list;
list_t proxy_list;
};
struct ndpsn
{
net_socket_t *sns, *ans;
struct in6_addr saddr, aaddr, taddr;
int ttl;
};
struct proxy
{
net_socket_t *ns;
list_t rule_list;
};
struct rule
{
proxy_t *proxy;
struct in6_addr addr;
struct in6_addr mask;
};
/* log.c */
void log_printf(int level, const char *fmt, ...);
/* icmp6.c */
net_socket_t *net_open(const char *iface);
int net_read(net_socket_t *ns, struct in6_addr *saddr, unsigned char *msg, size_t size);
/* conf.c */
int conf_load(const char *path);
/* list.c */
list_item_t *list_add(list_t *list, void *ptr);
void list_remove(list_item_t *li);
void list_clear(list_t *list);
void list_init(list_t *list);
/* ndpsn.c */
ndpsn_t *ndpsn_new(net_socket_t *ns, struct in6_addr *saddr, struct in6_addr *taddr);
/* util.c */
int util_parse_addr6(const char *ip, struct in6_addr *addr, struct in6_addr *mask);
int util_match_addr6(struct in6_addr *addr1, struct in6_addr *addr2, struct in6_addr *mask);
const char *util_ntop6(struct in6_addr *addr, struct in6_addr *mask);
int util_prefix2mask(int prefix, struct in6_addr *mask);
int util_mask2prefix(struct in6_addr *mask);
/* proxy.h */
proxy_t *proxy_new(const char *iface);
/* rule.h */
rule_t *rule_new(proxy_t *p, struct in6_addr *addr, struct in6_addr *mask);
#endif
#endif /* __NDPPD_H */