#ifndef IFCONFIG_IFCONFIG_H
#define IFCONFIG_IFCONFIG_H
#include <stdbool.h>
struct afswtch;
struct cmd;
typedef void c_func(const char *cmd, int arg, int s,
const struct afswtch *afp);
typedef void c_func2(const char *arg1, const char *arg2, int s,
const struct afswtch *afp);
struct cmd {
const char *c_name;
int c_parameter;
#define NEXTARG 0xffffff
#define NEXTARG2 0xfffffe
#define OPTARG 0xfffffd
union {
c_func *c_func;
c_func2 *c_func2;
} c_u;
int c_iscloneop;
struct cmd *c_next;
};
void cmd_register(struct cmd *);
typedef void callback_func(int s, void *);
void callback_register(callback_func *, void *);
#define DECL_CMD_FUNC(name, cmd, arg) \
void name(const char *cmd, int arg, int s, const struct afswtch *afp)
#define DECL_CMD_FUNC2(name, arg1, arg2) \
void name(const char *arg1, const char *arg2, int s, \
const struct afswtch *afp)
#define DEF_CMD(name, param, func) \
{ name, param, { .c_func = func }, 0, NULL }
#define DEF_CMD_ARG(name, func) \
{ .c_name = name, .c_parameter = NEXTARG, \
.c_u = { .c_func = func }, 0, NULL }
#define DEF_CMD_OPTARG(name, func) \
{ name, OPTARG, { .c_func = func }, 0, NULL }
#define DEF_CMD_ARG2(name, func) \
{ name, NEXTARG2, { .c_func2 = func }, 0, NULL }
#define DEF_CLONE_CMD(name, param, func) \
{ name, param, { .c_func = func }, 1, NULL }
#define DEF_CLONE_CMD_ARG(name, func) \
{ name, NEXTARG, { .c_func = func }, 1, NULL }
struct ifaddrs;
struct addrinfo;
enum {
RIDADDR,
ADDR,
MASK,
DSTADDR,
};
struct afswtch {
const char *af_name;
short af_af;
void (*af_status)(int, const struct ifaddrs *);
void (*af_other_status)(int);
void (*af_getaddr)(const char *, int);
void (*af_getprefix)(const char *, int);
void (*af_postproc)(int s, const struct afswtch *);
u_long af_difaddr;
u_long af_aifaddr;
void *af_ridreq;
void *af_addreq;
struct afswtch *af_next;
void (*af_status_tunnel)(int);
void (*af_settunnel)(int s, struct addrinfo *srcres,
struct addrinfo *dstres);
};
void af_register(struct afswtch *);
struct option {
const char *opt;
const char *opt_usage;
void (*cb)(const char *arg);
struct option *next;
};
void opt_register(struct option *);
extern char IfName[IFNAMSIZ];
extern bool supmedia;
extern bool printkeys;
extern bool printifname;
extern bool newaddr;
extern bool verbose;
extern int exit_code;
extern char *f_inet, *f_inet6, *f_ether, *f_addr, *f_scope;
void setifcap(const char *, int value, int s, const struct afswtch *);
void Perror(const char *cmd) __dead2;
void printb(const char *s, unsigned value, const char *bits);
void ifmaybeload(const char *);
typedef void clone_callback_func(int, struct ifreq *);
void clone_setdefcallback(const char *, clone_callback_func *);
struct ifmediareq *ifmedia_getstate(int s);
#endif