File: [local] / src / usr.sbin / dvmrpd / dvmrpe.h (download)
Revision 1.2, Fri Nov 10 11:09:56 2006 UTC (17 years, 6 months ago) by michele
Branch: MAIN
CVS Tags: OPENBSD_4_5_BASE, OPENBSD_4_5, OPENBSD_4_4_BASE, OPENBSD_4_4, OPENBSD_4_3_BASE, OPENBSD_4_3, OPENBSD_4_2_BASE, OPENBSD_4_2, OPENBSD_4_1_BASE, OPENBSD_4_1 Changes since 1.1: +2 -1 lines
introduce reference count for struct route_report so it can be shared and
freed correctly.
OK norby@ henning@
|
/* $OpenBSD: dvmrpe.h,v 1.2 2006/11/10 11:09:56 michele Exp $ */
/*
* Copyright (c) 2004, 2005, 2006 Esben Norby <norby@openbsd.org>
*
* Permission to use, copy, modify, and distribute this software for any
* purpose with or without fee is hereby granted, provided that the above
* copyright notice and this permission notice appear in all copies.
*
* THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
* WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
* MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
* ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
* WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
* ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
* OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
*/
#ifndef _DVMRPE_H_
#define _DVMRPE_H_
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <netinet/in_systm.h>
#include <netinet/ip.h>
TAILQ_HEAD(ctl_conns, ctl_conn) ctl_conns;
/* neighbor events */
enum nbr_event {
NBR_EVT_NOTHING,
NBR_EVT_PROBE_RCVD,
NBR_EVT_1_WAY_RCVD,
NBR_EVT_2_WAY_RCVD,
NBR_EVT_KILL_NBR,
NBR_EVT_ITIMER,
NBR_EVT_LL_DOWN
};
/* neighbor actions */
enum nbr_action {
NBR_ACT_NOTHING,
NBR_ACT_RST_ITIMER,
NBR_ACT_STRT_ITIMER,
NBR_ACT_RESET,
NBR_ACT_DEL,
NBR_ACT_CLR_LST
};
struct nbr {
LIST_ENTRY(nbr) entry, hash;
struct event inactivity_timer;
struct rr_head rr_list;
struct in_addr addr;
struct in_addr id;
struct iface *iface;
u_int32_t peerid; /* unique ID in DB */
u_int32_t gen_id;
time_t uptime;
int state;
u_int8_t link_state;
u_int8_t capabilities;
u_int8_t compat; /* mrouted compat */
};
struct route_report {
struct in_addr net;
struct in_addr mask;
struct in_addr nexthop;
struct in_addr adv_rtr;
int refcount;
u_short ifindex;
u_int8_t metric;
};
struct rr_entry {
TAILQ_ENTRY(rr_entry) entry;
struct route_report *re;
};
/* ask_nbrs2.c */
int send_ask_nbrs2(struct iface *, struct in_addr, void *, int);
void recv_ask_nbrs2(struct nbr *, char *, u_int16_t);
/* dvmrpe.c */
pid_t dvmrpe(struct dvmrpd_conf *, int[2], int[2], int[2]);
void dvmrpe_dispatch_main(int, short, void *);
void dvmrpe_dispatch_rde(int, short, void *);
int dvmrpe_imsg_compose_parent(int, pid_t, void *, u_int16_t);
int dvmrpe_imsg_compose_rde(int, u_int32_t, pid_t, void *, u_int16_t);
void dvmrpe_iface_ctl(struct ctl_conn *, unsigned int);
void dvmrpe_iface_igmp_ctl(struct ctl_conn *, unsigned int);
void dvmrpe_nbr_ctl(struct ctl_conn *);
/* graft.c */
int send_graft(struct iface *, struct in_addr, void *, int);
void recv_graft(struct nbr *, char *, u_int16_t);
/* graft_ack.c */
int send_graft_ack(struct iface *, struct in_addr, void *, int);
void recv_graft_ack(struct nbr *, char *, u_int16_t);
/* group.c */
struct ctl_group *group_to_ctl(struct group *);
/* igmp.c */
int group_fsm(struct group *, enum group_event);
int send_igmp_query(struct iface *, struct group *group);
void recv_igmp_query(struct iface *, struct in_addr, char *, u_int16_t);
void recv_igmp_report(struct iface *, struct in_addr, char *, u_int16_t,
u_int8_t);
void recv_igmp_leave(struct iface *, struct in_addr, char *, u_int16_t);
struct group *group_list_add(struct iface *, u_int32_t);
void group_list_remove(struct iface *, struct group *);
struct group *group_list_find(struct iface *, u_int32_t);
void group_list_clr(struct iface *);
int group_list_empty(struct iface *);
void group_list_dump(struct iface *, struct ctl_conn *);
const char *group_event_name(int);
const char *group_action_name(int);
/* interface.c */
int if_fsm(struct iface *, enum iface_event);
struct iface *if_new(struct kif *);
int if_del(struct iface *);
int if_nbr_list_empty(struct iface *);
void if_init(struct dvmrpd_conf *, struct iface *);
const char *if_event_name(int);
const char *if_action_name(int);
int if_set_mcast_ttl(int, u_int8_t);
int if_set_tos(int, int);
int if_set_mcast_loop(int);
void if_set_recvbuf(int);
int if_join_group(struct iface *, struct in_addr *);
int if_leave_group(struct iface *, struct in_addr *);
int if_set_mcast(struct iface *);
struct ctl_iface *if_to_ctl(struct iface *);
/* nbrs2.c */
int send_nbrs2(struct iface *, struct in_addr, void *, int);
void recv_nbrs2(struct nbr *, char *, u_int16_t);
/* neighbor.c */
void nbr_init(u_int32_t);
struct nbr *nbr_new(u_int32_t, struct iface *, int);
int nbr_del(struct nbr *);
struct nbr *nbr_find_ip(struct iface *, u_int32_t);
struct nbr *nbr_find_peerid(u_int32_t);
int nbr_fsm(struct nbr *, enum nbr_event);
int nbr_start_itimer(struct nbr *);
int nbr_stop_itimer(struct nbr *);
int nbr_reset_itimer(struct nbr *);
void nbr_itimer(int, short, void *);
int nbr_act_start(struct nbr *);
int nbr_act_reset_itimer(struct nbr *);
int nbr_act_start_itimer(struct nbr *);
int nbr_act_delete(struct nbr *);
int nbr_act_clear_lists(struct nbr *);
const char *nbr_event_name(int);
const char *nbr_action_name(int);
struct ctl_nbr *nbr_to_ctl(struct nbr *);
/* packet.c */
int gen_dvmrp_hdr(struct buf *, struct iface *, u_int8_t);
int send_packet(struct iface *, void *, size_t, struct sockaddr_in *);
void recv_packet(int, short, void *);
char *pkt_ptr; /* packet buffer */
/* probe.c */
int send_probe(struct iface *);
void recv_probe(struct iface *, struct in_addr, u_int32_t, u_int8_t,
char *, u_int16_t);
/* prune.c */
int send_prune(struct nbr *, void *, int);
void recv_prune(struct nbr *, char *, u_int16_t);
/* report.c */
int send_report(struct iface *, struct in_addr, void *, int);
void recv_report(struct nbr *, char *, u_int16_t);
void report_timer(int, short, void *);
int start_report_timer(void);
int stop_report_timer(void);
void rr_list_add(struct rr_head *, struct route_report *);
void rr_list_clr(struct rr_head *);
void rr_list_send(struct rr_head *, struct iface *, struct nbr *);
#endif /* _DVMRPE_H_ */