1*b38873a2Sjca /* $OpenBSD: ripe.h,v 1.12 2017/01/17 16:30:54 jca 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 28ddeeec14Snorby TAILQ_HEAD(ctl_conns, ctl_conn) ctl_conns; 2987feb355Sclaudio u_int8_t *pkt_ptr; 30ddeeec14Snorby 31ddeeec14Snorby /* neighbor events */ 32ddeeec14Snorby enum nbr_event { 33ddeeec14Snorby NBR_EVT_RESPONSE_RCVD, 34ddeeec14Snorby NBR_EVT_REQUEST_RCVD, 35e3be6b29Smichele NBR_EVT_RESPONSE_SENT, 36ddeeec14Snorby NBR_EVT_TIMEOUT, 37ddeeec14Snorby NBR_EVT_KILL_NBR, 38ddeeec14Snorby NBR_EVT_NOTHING 39ddeeec14Snorby }; 40ddeeec14Snorby 41ddeeec14Snorby /* neighbor actions */ 42ddeeec14Snorby enum nbr_action { 43ddeeec14Snorby NBR_ACT_STRT_TIMER, 44ddeeec14Snorby NBR_ACT_RST_TIMER, 45ddeeec14Snorby NBR_ACT_DEL, 46ddeeec14Snorby NBR_ACT_NOTHING 47ddeeec14Snorby }; 48ddeeec14Snorby 49ddeeec14Snorby struct nbr_failed { 50a4d2b8b2Smichele struct event timeout_timer; 51ddeeec14Snorby LIST_ENTRY(nbr_failed) entry; 52ddeeec14Snorby struct in_addr addr; 53ddeeec14Snorby u_int32_t auth_seq_num; 54ddeeec14Snorby }; 55ddeeec14Snorby 56ddeeec14Snorby struct nbr { 57ddeeec14Snorby LIST_ENTRY(nbr) entry, hash; 58ddeeec14Snorby struct event timeout_timer; 59ddeeec14Snorby struct in_addr addr; 60ddeeec14Snorby struct in_addr id; 61ddeeec14Snorby 62ddeeec14Snorby struct packet_head rq_list; 63ddeeec14Snorby struct packet_head rp_list; 64ddeeec14Snorby 65ddeeec14Snorby struct iface *iface; 66ddeeec14Snorby 67ddeeec14Snorby u_int32_t peerid; /* unique ID in DB */ 68ddeeec14Snorby u_int32_t auth_seq_num; 69ddeeec14Snorby u_int16_t port; 70ddeeec14Snorby time_t uptime; 71ddeeec14Snorby int state; 72ddeeec14Snorby int flags; 73ddeeec14Snorby }; 74ddeeec14Snorby 75960f8542Smichele /* packet.c */ 76ddeeec14Snorby int send_packet(struct iface *, void *, size_t, struct sockaddr_in *); 77ddeeec14Snorby void recv_packet(int, short, void *); 78e39620e5Snicm int gen_rip_hdr(struct ibuf *, u_int8_t); 79ddeeec14Snorby 80960f8542Smichele /* interface.c */ 81ddeeec14Snorby void if_init(struct ripd_conf *, struct iface *); 82ddeeec14Snorby int if_fsm(struct iface *, enum iface_event); 83ddeeec14Snorby int if_set_mcast(struct iface *); 84ddeeec14Snorby int if_set_mcast_ttl(int, u_int8_t); 85ddeeec14Snorby int if_set_mcast_loop(int); 86ddeeec14Snorby int if_set_opt(int); 87ddeeec14Snorby int if_set_tos(int, int); 88ddeeec14Snorby void if_set_recvbuf(int); 89ddeeec14Snorby struct iface *if_new(struct kif *); 90ddeeec14Snorby void if_del(struct iface *); 91ddeeec14Snorby const char *if_event_name(int); 92ddeeec14Snorby const char *if_action_name(int); 93ddeeec14Snorby int if_join_group(struct iface *, struct in_addr *); 94ddeeec14Snorby int if_leave_group(struct iface *, struct in_addr *); 95ddeeec14Snorby struct ctl_iface *if_to_ctl(struct iface *); 96ddeeec14Snorby 9731b802a2Smichele /* message.c */ 9887feb355Sclaudio void recv_request(struct iface *, struct nbr *, u_int8_t *, u_int16_t); 9987feb355Sclaudio void recv_response(struct iface *, struct nbr *, u_int8_t *, u_int16_t); 100ddeeec14Snorby void add_entry(struct packet_head *, struct rip_route *); 10131b802a2Smichele void clear_list(struct packet_head *); 102ddeeec14Snorby int send_triggered_update(struct iface *, struct rip_route *); 103ddeeec14Snorby int send_request(struct packet_head *, struct iface *, struct nbr *); 104ddeeec14Snorby int send_response(struct packet_head *, struct iface *, struct nbr *); 105ddeeec14Snorby int start_report_timer(void); 106ddeeec14Snorby void report_timer(int, short, void *); 107ddeeec14Snorby 108ddeeec14Snorby /* ripe.c */ 109ddeeec14Snorby pid_t ripe(struct ripd_conf *, int [2], int [2], int [2]); 110ddeeec14Snorby int ripe_imsg_compose_parent(int, pid_t, void *, u_int16_t); 111ddeeec14Snorby int ripe_imsg_compose_rde(int, u_int32_t, pid_t, void *, 112ddeeec14Snorby u_int16_t); 113ddeeec14Snorby void ripe_dispatch_main(int, short, void *); 114ddeeec14Snorby void ripe_dispatch_rde(int, short, void *); 115ddeeec14Snorby void ripe_iface_ctl(struct ctl_conn *, unsigned int); 116ddeeec14Snorby void ripe_nbr_ctl(struct ctl_conn *); 1174d8b14b6Smichele void ripe_demote_iface(struct iface *, int); 118ddeeec14Snorby 119ddeeec14Snorby /* auth.c */ 12087feb355Sclaudio int auth_validate(u_int8_t **, u_int16_t *, struct iface *, struct nbr *, 121ddeeec14Snorby struct nbr_failed *, u_int32_t *); 122e39620e5Snicm int auth_gen(struct ibuf *, struct iface *); 123e39620e5Snicm int auth_add_trailer(struct ibuf *, struct iface *); 124d1c9c145Sclaudio int md_list_add(struct auth_md_head *, u_int8_t, char *); 125ddeeec14Snorby void md_list_copy(struct auth_md_head *, struct auth_md_head *); 126ddeeec14Snorby void md_list_clr(struct auth_md_head *); 127ddeeec14Snorby 128ddeeec14Snorby /* neighbor.c */ 129ddeeec14Snorby void nbr_init(u_int32_t); 13063b45a5dSmichele struct nbr *nbr_new(u_int32_t, struct iface *); 131*b38873a2Sjca void nbr_del(struct nbr *); 132ddeeec14Snorby 133ddeeec14Snorby struct nbr *nbr_find_ip(struct iface *, u_int32_t); 134ddeeec14Snorby struct nbr *nbr_find_peerid(u_int32_t); 135ddeeec14Snorby struct nbr_failed *nbr_failed_find(struct iface *, u_int32_t); 136a4d2b8b2Smichele void nbr_failed_delete(struct nbr_failed *); 137ddeeec14Snorby 138ddeeec14Snorby int nbr_fsm(struct nbr *, enum nbr_event); 139ddeeec14Snorby void nbr_timeout_timer(int, short, void *); 140*b38873a2Sjca void nbr_act_del(struct nbr *); 141ddeeec14Snorby 142ddeeec14Snorby const char *nbr_event_name(int); 143ddeeec14Snorby const char *nbr_action_name(int); 144ddeeec14Snorby 145ddeeec14Snorby struct ctl_nbr *nbr_to_ctl(struct nbr *); 146ddeeec14Snorby 147ddeeec14Snorby #endif /* _RIPE_H_ */ 148