xref: /openbsd/usr.sbin/ripd/ripe.h (revision 7b5b21db)
1*7b5b21dbSclaudio /*	$OpenBSD: ripe.h,v 1.13 2021/01/19 10:00:36 claudio Exp $ */
2ddeeec14Snorby 
3ddeeec14Snorby /*
4ddeeec14Snorby  * Copyright (c) 2006 Michele Marchetto <mydecay@openbeer.it>
5ddeeec14Snorby  * Copyright (c) 2004, 2005 Esben Norby <norby@openbsd.org>
6ddeeec14Snorby  *
7ddeeec14Snorby  * Permission to use, copy, modify, and distribute this software for any
8ddeeec14Snorby  * purpose with or without fee is hereby granted, provided that the above
9ddeeec14Snorby  * copyright notice and this permission notice appear in all copies.
10ddeeec14Snorby  *
11ddeeec14Snorby  * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
12ddeeec14Snorby  * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
13ddeeec14Snorby  * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
14ddeeec14Snorby  * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
15ddeeec14Snorby  * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
16ddeeec14Snorby  * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
17ddeeec14Snorby  * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
18ddeeec14Snorby  */
19ddeeec14Snorby 
20ddeeec14Snorby #ifndef _RIPE_H_
21ddeeec14Snorby #define _RIPE_H_
22ddeeec14Snorby 
23ddeeec14Snorby #include <sys/types.h>
24ddeeec14Snorby #include <sys/socket.h>
25ddeeec14Snorby #include <netinet/in.h>
26ddeeec14Snorby #include <netinet/ip.h>
27ddeeec14Snorby 
2887feb355Sclaudio u_int8_t	*pkt_ptr;
29ddeeec14Snorby 
30ddeeec14Snorby /* neighbor events */
31ddeeec14Snorby enum nbr_event {
32ddeeec14Snorby 	NBR_EVT_RESPONSE_RCVD,
33ddeeec14Snorby 	NBR_EVT_REQUEST_RCVD,
34e3be6b29Smichele 	NBR_EVT_RESPONSE_SENT,
35ddeeec14Snorby 	NBR_EVT_TIMEOUT,
36ddeeec14Snorby 	NBR_EVT_KILL_NBR,
37ddeeec14Snorby 	NBR_EVT_NOTHING
38ddeeec14Snorby };
39ddeeec14Snorby 
40ddeeec14Snorby /* neighbor actions */
41ddeeec14Snorby enum nbr_action {
42ddeeec14Snorby 	NBR_ACT_STRT_TIMER,
43ddeeec14Snorby 	NBR_ACT_RST_TIMER,
44ddeeec14Snorby 	NBR_ACT_DEL,
45ddeeec14Snorby 	NBR_ACT_NOTHING
46ddeeec14Snorby };
47ddeeec14Snorby 
48ddeeec14Snorby struct nbr_failed {
49a4d2b8b2Smichele 	struct event		 timeout_timer;
50ddeeec14Snorby 	LIST_ENTRY(nbr_failed)	 entry;
51ddeeec14Snorby 	struct in_addr		 addr;
52ddeeec14Snorby 	u_int32_t		 auth_seq_num;
53ddeeec14Snorby };
54ddeeec14Snorby 
55ddeeec14Snorby struct nbr {
56ddeeec14Snorby 	LIST_ENTRY(nbr)		 entry, hash;
57ddeeec14Snorby 	struct event		 timeout_timer;
58ddeeec14Snorby 	struct in_addr		 addr;
59ddeeec14Snorby 	struct in_addr		 id;
60ddeeec14Snorby 
61ddeeec14Snorby 	struct packet_head	 rq_list;
62ddeeec14Snorby 	struct packet_head	 rp_list;
63ddeeec14Snorby 
64ddeeec14Snorby 	struct iface		*iface;
65ddeeec14Snorby 
66ddeeec14Snorby 	u_int32_t		 peerid;	/* unique ID in DB */
67ddeeec14Snorby 	u_int32_t		 auth_seq_num;
68ddeeec14Snorby 	u_int16_t		 port;
69ddeeec14Snorby 	time_t			 uptime;
70ddeeec14Snorby 	int			 state;
71ddeeec14Snorby 	int			 flags;
72ddeeec14Snorby };
73ddeeec14Snorby 
74*7b5b21dbSclaudio struct ctl_conn;
75*7b5b21dbSclaudio 
76960f8542Smichele /* packet.c */
77ddeeec14Snorby int	 send_packet(struct iface *, void *, size_t, struct sockaddr_in *);
78ddeeec14Snorby void	 recv_packet(int, short, void *);
79e39620e5Snicm int	 gen_rip_hdr(struct ibuf *, u_int8_t);
80ddeeec14Snorby 
81960f8542Smichele /* interface.c */
82ddeeec14Snorby void			 if_init(struct ripd_conf *, struct iface *);
83ddeeec14Snorby int			 if_fsm(struct iface *, enum iface_event);
84ddeeec14Snorby int			 if_set_mcast(struct iface *);
85ddeeec14Snorby int			 if_set_mcast_ttl(int, u_int8_t);
86ddeeec14Snorby int			 if_set_mcast_loop(int);
87ddeeec14Snorby int			 if_set_opt(int);
88ddeeec14Snorby int			 if_set_tos(int, int);
89ddeeec14Snorby void			 if_set_recvbuf(int);
90ddeeec14Snorby struct iface		*if_new(struct kif *);
91ddeeec14Snorby void			 if_del(struct iface *);
92ddeeec14Snorby const char		*if_event_name(int);
93ddeeec14Snorby const char		*if_action_name(int);
94ddeeec14Snorby int			 if_join_group(struct iface *, struct in_addr *);
95ddeeec14Snorby int			 if_leave_group(struct iface *, struct in_addr *);
96ddeeec14Snorby struct ctl_iface	*if_to_ctl(struct iface *);
97ddeeec14Snorby 
9831b802a2Smichele /* message.c */
9987feb355Sclaudio void	 recv_request(struct iface *, struct nbr *, u_int8_t *, u_int16_t);
10087feb355Sclaudio void	 recv_response(struct iface *, struct nbr *, u_int8_t *, u_int16_t);
101ddeeec14Snorby void	 add_entry(struct packet_head *, struct rip_route *);
10231b802a2Smichele void	 clear_list(struct packet_head *);
103ddeeec14Snorby int	 send_triggered_update(struct iface *, struct rip_route *);
104ddeeec14Snorby int	 send_request(struct packet_head *, struct iface *, struct nbr *);
105ddeeec14Snorby int	 send_response(struct packet_head *, struct iface *, struct nbr *);
106ddeeec14Snorby int	 start_report_timer(void);
107ddeeec14Snorby void	 report_timer(int, short, void *);
108ddeeec14Snorby 
109ddeeec14Snorby /* ripe.c */
110ddeeec14Snorby pid_t	 ripe(struct ripd_conf *, int [2], int [2], int [2]);
111ddeeec14Snorby int	 ripe_imsg_compose_parent(int, pid_t, void *, u_int16_t);
112ddeeec14Snorby int	 ripe_imsg_compose_rde(int, u_int32_t, pid_t, void *,
113ddeeec14Snorby 	    u_int16_t);
114ddeeec14Snorby void	 ripe_dispatch_main(int, short, void *);
115ddeeec14Snorby void	 ripe_dispatch_rde(int, short, void *);
116ddeeec14Snorby void	 ripe_iface_ctl(struct ctl_conn *, unsigned int);
117ddeeec14Snorby void	 ripe_nbr_ctl(struct ctl_conn *);
1184d8b14b6Smichele void	 ripe_demote_iface(struct iface *, int);
119ddeeec14Snorby 
120ddeeec14Snorby /* auth.c */
12187feb355Sclaudio int	 auth_validate(u_int8_t **, u_int16_t *, struct iface *, struct nbr *,
122ddeeec14Snorby 	    struct nbr_failed *, u_int32_t *);
123e39620e5Snicm int	 auth_gen(struct ibuf *, struct iface *);
124e39620e5Snicm int	 auth_add_trailer(struct ibuf *, struct iface *);
125d1c9c145Sclaudio int	 md_list_add(struct auth_md_head *, u_int8_t, char *);
126ddeeec14Snorby void	 md_list_copy(struct auth_md_head *, struct auth_md_head *);
127ddeeec14Snorby void	 md_list_clr(struct auth_md_head *);
128ddeeec14Snorby 
129ddeeec14Snorby /* neighbor.c */
130ddeeec14Snorby void		 nbr_init(u_int32_t);
13163b45a5dSmichele struct nbr	*nbr_new(u_int32_t, struct iface *);
132b38873a2Sjca void		 nbr_del(struct nbr *);
133ddeeec14Snorby 
134ddeeec14Snorby struct nbr		*nbr_find_ip(struct iface *, u_int32_t);
135ddeeec14Snorby struct nbr		*nbr_find_peerid(u_int32_t);
136ddeeec14Snorby struct nbr_failed	*nbr_failed_find(struct iface *, u_int32_t);
137a4d2b8b2Smichele void			 nbr_failed_delete(struct nbr_failed *);
138ddeeec14Snorby 
139ddeeec14Snorby int		 nbr_fsm(struct nbr *, enum nbr_event);
140ddeeec14Snorby void		 nbr_timeout_timer(int, short, void *);
141b38873a2Sjca void		 nbr_act_del(struct nbr *);
142ddeeec14Snorby 
143ddeeec14Snorby const char	*nbr_event_name(int);
144ddeeec14Snorby const char	*nbr_action_name(int);
145ddeeec14Snorby 
146ddeeec14Snorby struct ctl_nbr	*nbr_to_ctl(struct nbr *);
147ddeeec14Snorby 
148ddeeec14Snorby #endif /* _RIPE_H_ */
149