OpenBSD-4.6/usr.sbin/ldpd/ldpe.h

Compare this file to the similar file:
Show the results in this format:

/*	$OpenBSD: ldpe.h,v 1.2 2009/06/05 22:34:45 michele Exp $ */

/*
 * Copyright (c) 2004, 2005, 2008 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 _LDPE_H_
#define _LDPE_H_

#define max(x,y) ((x) > (y) ? (x) : (y))

#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;

struct mapping_entry {
	TAILQ_ENTRY(mapping_entry)	entry;
	u_int32_t			label;
	u_int32_t			prefix;
	u_int8_t			prefixlen;
};

struct nbr {
	LIST_ENTRY(nbr)		 entry, hash;
	struct bufferevent	*bev;
	struct event		 inactivity_timer;
	struct event		 keepalive_timer;
	struct event		 keepalive_timeout;
	struct event		 initdelay_timer;

	struct mapping_head	 mapping_list;
	struct mapping_head	 withdraw_list;
	struct mapping_head	 request_list;
	struct mapping_head	 release_list;
	struct mapping_head	 abortreq_list;

	int			 fd;

	struct in_addr		 addr;
	struct in_addr		 id;

	struct iface		*iface;

	time_t			 uptime;

	u_int32_t		 peerid;	/* unique ID in DB */

	int			 state;

	u_int16_t		 lspace;
	u_int16_t		 holdtime;
	u_int16_t		 keepalive;

	u_int8_t		 priority;
	u_int8_t		 options;

	u_int8_t		 flags;
	u_int8_t		 hello_type;

};

/* hello.c */
int	 send_hello(struct iface *);
void	 recv_hello(struct iface *,  struct in_addr, char *, u_int16_t);

/* init.c */
int	 send_init(struct nbr *);
int	 recv_init(struct nbr *, char *, u_int16_t);

/* keepalive.c */
int	 send_keepalive(struct nbr *);
int	 recv_keepalive(struct nbr *, char *, u_int16_t);

/* notification.c */
int	 send_notification(u_int32_t, struct iface *, int, u_int32_t,
	    u_int32_t);
int	 send_notification_nbr(struct nbr *, u_int32_t, u_int32_t, u_int32_t);
int	 recv_notification(struct nbr *, char *, u_int16_t);

/* address.c */
int	 send_address(struct nbr *, struct iface *);
int	 recv_address(struct nbr *, char *, u_int16_t);
int	 send_address_withdraw(struct nbr *, struct iface *);
int	 recv_address_withdraw(struct nbr *, char *, u_int16_t);

/* labelmapping.c */
int	 send_labelmapping(struct nbr *);
int	 recv_labelmapping(struct nbr *, char *, u_int16_t);
int	 send_labelrequest(struct nbr *);
int	 recv_labelrequest(struct nbr *, char *, u_int16_t);
int	 send_labelwithdraw(struct nbr *);
int	 recv_labelwithdraw(struct nbr *, char *, u_int16_t);
int	 send_labelrelease(struct nbr *);
int	 recv_labelrelease(struct nbr *, char *, u_int16_t);
int	 send_labelabortreq(struct nbr *);
int	 recv_labelabortreq(struct nbr *, char *, u_int16_t);

/* ldpe.c */
pid_t		 ldpe(struct ldpd_conf *, int[2], int[2], int[2]);
void		 ldpe_dispatch_main(int, short, void *);
void		 ldpe_dispatch_lde(int, short, void *);
int		 ldpe_imsg_compose_parent(int, pid_t, void *, u_int16_t);
int		 ldpe_imsg_compose_lde(int, u_int32_t, pid_t, void *,
		     u_int16_t);
u_int32_t	 ldpe_router_id(void);
void		 ldpe_fib_update(int);
void		 ldpe_iface_ctl(struct ctl_conn *, unsigned int);
void		 ldpe_nbr_ctl(struct ctl_conn *);

/* interface.c */
int		 if_fsm(struct iface *, enum iface_event);

struct iface	*if_new(struct kif *, struct kif_addr *);
void		 if_del(struct iface *);
void		 if_init(struct ldpd_conf *, struct iface *);

int		 if_act_start(struct iface *);
int		 if_act_elect(struct iface *);
int		 if_act_reset(struct iface *);

struct ctl_iface	*if_to_ctl(struct iface *);

int	 if_join_group(struct iface *, struct in_addr *);
int	 if_leave_group(struct iface *, struct in_addr *);
int	 if_set_mcast(struct iface *);
int	 if_set_recvif(int, int);
void	 if_set_recvbuf(int);
int	 if_set_mcast_loop(int);
int	 if_set_mcast_ttl(int, u_int8_t);
int	 if_set_tos(int, int);
int	 if_set_reuse(int, int);
int	 if_set_nonblock(int);

/* neighbor.c */
void		 nbr_init(u_int32_t);
struct nbr	*nbr_new(u_int32_t, u_int16_t, struct iface *, int);
void		 nbr_del(struct nbr *);

struct nbr	*nbr_find_ip(struct iface *, u_int32_t);
struct nbr	*nbr_find_ldpid(struct iface *, u_int32_t, u_int16_t);
struct nbr	*nbr_find_peerid(u_int32_t);

int	 nbr_fsm(struct nbr *, enum nbr_event);

void	 nbr_itimer(int, short, void *);
void	 nbr_start_itimer(struct nbr *);
void	 nbr_stop_itimer(struct nbr *);
void	 nbr_reset_itimer(struct nbr *);
void	 nbr_ktimer(int, short, void *);
void	 nbr_start_ktimer(struct nbr *);
void	 nbr_stop_ktimer(struct nbr *);
void	 nbr_reset_ktimer(struct nbr *);
void	 nbr_ktimeout(int, short, void *);
void	 nbr_start_ktimeout(struct nbr *);
void	 nbr_stop_ktimeout(struct nbr *);
void	 nbr_reset_ktimeout(struct nbr *);
void	 nbr_idtimer(int, short, void *);
void	 nbr_start_idtimer(struct nbr *);
void	 nbr_stop_idtimer(struct nbr *);
void	 nbr_reset_idtimer(struct nbr *);
int	 nbr_pending_idtimer(struct nbr *);

int	 nbr_act_reset_itimer(struct nbr *);
int	 nbr_act_start_itimer(struct nbr *);
int	 nbr_act_reset_ktimer(struct nbr *);
int	 nbr_act_start_ktimer(struct nbr *);
int	 nbr_act_reset_ktimeout(struct nbr *);
int	 nbr_act_start_ktimeout(struct nbr *);
int	 nbr_act_reset_idtimer(struct nbr *);
int	 nbr_act_start_idtimer(struct nbr *);
int	 nbr_act_session_establish(struct nbr *, int);
int	 nbr_close_connection(struct nbr *);

void			 nbr_mapping_add(struct nbr *, struct mapping_head *,
			    struct map *);
struct mapping_entry	*nbr_mapping_find(struct nbr *, struct mapping_head *,
			    struct map *);
void			 nbr_mapping_del(struct nbr *, struct mapping_head *,
			    struct map *);
void			 nbr_mapping_list_clr(struct nbr *,
			    struct mapping_head *);

struct ctl_nbr	*nbr_to_ctl(struct nbr *);

/* packet.c */
int	 gen_ldp_hdr(struct buf *, struct iface *, u_int16_t);
int	 gen_msg_tlv(struct buf *, u_int32_t, u_int16_t);
int	 send_packet(struct iface *, void *, size_t, struct sockaddr_in *);
void	 disc_recv_packet(int, short, void *);
void	 session_recv_packet(int, short, void *);

void	 session_read(struct bufferevent *, void *);
void	 session_error(struct bufferevent *, short, void *);
void	 session_close(struct nbr *);
void	 session_shutdown(struct nbr *, u_int32_t, u_int32_t, u_int32_t);

char	*pkt_ptr;	/* packet buffer */

#endif	/* _LDPE_H_ */