Hi, Here is the first patch towards adding RPKI/ROA support to OpenBGPd.
It aims at renaming variables & functions to prepare the ground for bigger changes. Is it OK ? Denis diff -u bgpd.orig/control.c bgpd/control.c --- bgpd.orig/control.c Fri Aug 15 18:21:53 2014 +++ bgpd/control.c Fri Aug 15 21:05:56 2014 @@ -282,7 +282,7 @@ IMSG_CTL_SHOW_NEIGHBOR, 0, 0, -1, p, sizeof(*p)); for (i = 1; i < Timer_Max; i++) { - if (!timer_running(p, i, &d)) + if (!peer_timer_running(p, i, &d)) continue; ct.type = i; ct.val = d; @@ -342,7 +342,7 @@ if (!p->conf.down) { session_stop(p, ERR_CEASE_ADMIN_RESET); - timer_set(p, Timer_IdleHold, + peer_timer_set(p, Timer_IdleHold, SESSION_CLEAR_DELAY); } else { session_stop(p, diff -u bgpd.orig/log.c bgpd/log.c --- bgpd.orig/log.c Fri Aug 15 18:21:53 2014 +++ bgpd/log.c Fri Aug 15 21:05:56 2014 @@ -236,7 +236,7 @@ } void -log_statechange(struct peer *peer, enum session_state nstate, +log_peer_statechange(struct peer *peer, enum session_state nstate, enum session_events event) { char *p; diff -u bgpd.orig/parse.y bgpd/parse.y --- bgpd.orig/parse.y Fri Aug 15 18:21:53 2014 +++ bgpd/parse.y Fri Aug 15 21:06:57 2014 @@ -87,7 +87,7 @@ static struct filter_rule *curpeer_filter[2]; static struct filter_rule *curgroup_filter[2]; static struct listen_addrs *listen_addrs; -static u_int32_t id; +static u_int32_t peerid; struct filter_peers_l { struct filter_peers_l *next; @@ -123,7 +123,7 @@ char *); int add_rib(char *, u_int, u_int16_t); struct rde_rib *find_rib(char *); -int get_id(struct peer *); +int get_peerid(struct peer *); int merge_prefixspec(struct filter_prefix_l *, struct filter_prefixlen *); int expand_rule(struct filter_rule *, struct filter_peers_l *, @@ -881,8 +881,8 @@ curpeer->conf.remote_addr.aid] == -1) curpeer->conf.capabilities.mp[ curpeer->conf.remote_addr.aid] = 1; - if (get_id(curpeer)) { - yyerror("get_id failed"); + if (get_peerid(curpeer)) { + yyerror("get_peerid failed"); YYERROR; } } @@ -915,8 +915,8 @@ YYERROR; } free($2); - if (get_id(curgroup)) { - yyerror("get_id failed"); + if (get_peerid(curgroup)) { + yyerror("get_peerid failed"); YYERROR; } } @@ -2609,7 +2609,7 @@ peer_l_old = *xpeers; curpeer = NULL; curgroup = NULL; - id = 1; + peerid = 1; /* network list is always empty in the parent */ gnetconf = netconf = nc; @@ -3205,7 +3205,7 @@ } int -get_id(struct peer *newpeer) +get_peerid(struct peer *newpeer) { struct peer *p; @@ -3225,12 +3225,13 @@ } /* new one */ - for (; id < UINT_MAX / 2; id++) { + for (; peerid < UINT_MAX / 2; peerid++) { for (p = peer_l_old; p != NULL && - p->conf.id != id && p->conf.groupid != id; p = p->next) + p->conf.id != peerid && p->conf.groupid != peerid; + p = p->next) ; /* nothing */ if (p == NULL) { /* we found a free id */ - newpeer->conf.id = id++; + newpeer->conf.id = peerid++; return (0); } } diff -u bgpd.orig/session.c bgpd/session.c --- bgpd.orig/session.c Fri Aug 15 18:21:53 2014 +++ bgpd/session.c Fri Aug 15 21:10:30 2014 @@ -58,10 +58,11 @@ int setup_listeners(u_int *); void init_conf(struct bgpd_config *); void init_peer(struct peer *); -void start_timer_holdtime(struct peer *); -void start_timer_keepalive(struct peer *); +void start_peer_timer_holdtime(struct peer *); +void start_peer_timer_keepalive(struct peer *); void session_close_connection(struct peer *); -void change_state(struct peer *, enum session_state, enum session_events); +void change_peer_state(struct peer *, enum session_state, + enum session_events); int session_setup_socket(struct peer *); void session_accept(int); int session_connect(struct peer *); @@ -199,7 +200,7 @@ u_int new_cnt; u_int32_t ctl_queued; struct passwd *pw; - struct peer *p, **peer_l = NULL, *last, *next; + struct peer *p, **peer_l = NULL, *plast, *pnext; struct mrt *m, *xm, **mrt_l = NULL; struct pollfd *pfd = NULL; struct ctl_conn *ctl_conn; @@ -270,10 +271,10 @@ while (session_quit == 0) { /* check for peers to be initialized or deleted */ - last = NULL; + plast = NULL; if (!pending_reconf) { - for (p = peers; p != NULL; p = next) { - next = p->next; + for (p = peers; p != NULL; p = pnext) { + pnext = p->next; /* cloned peer that idled out? */ if (p->template && (p->state == STATE_IDLE || p->state == STATE_ACTIVE) && @@ -289,7 +290,7 @@ if (p->conf.reconf_action == RECONF_REINIT) { session_stop(p, ERR_CEASE_ADMIN_RESET); if (!p->conf.down) - timer_set(p, Timer_IdleHold, 0); + peer_timer_set(p, Timer_IdleHold, 0); } /* deletion due? */ @@ -299,17 +300,17 @@ p->conf.demote_group[0] = 0; session_stop(p, ERR_CEASE_PEER_UNCONF); log_peer_warnx(&p->conf, "removed"); - if (last != NULL) - last->next = next; + if (plast != NULL) + plast->next = pnext; else - peers = next; - timer_remove_all(p); + peers = pnext; + peer_timer_remove_all(p); free(p); peer_cnt--; continue; } p->conf.reconf_action = RECONF_NONE; - last = p; + plast = p; } } @@ -414,7 +415,7 @@ struct peer_timer *pt; /* check timers */ - if ((pt = timer_nextisdue(p)) != NULL) { + if ((pt = peer_timer_nextisdue(p)) != NULL) { switch (pt->type) { case Timer_Hold: bgp_fsm(p, EVNT_TIMER_HOLDTIME); @@ -434,29 +435,29 @@ INTERVAL_IDLE_HOLD_INITIAL) { p->IdleHoldTime = INTERVAL_IDLE_HOLD_INITIAL; - timer_stop(p, + peer_timer_stop(p, Timer_IdleHoldReset); p->errcnt = 0; } else - timer_set(p, + peer_timer_set(p, Timer_IdleHoldReset, p->IdleHoldTime); break; case Timer_CarpUndemote: - timer_stop(p, Timer_CarpUndemote); + peer_timer_stop(p, Timer_CarpUndemote); if (p->demoted && p->state == STATE_ESTABLISHED) session_demote(p, -1); break; case Timer_RestartTimeout: - timer_stop(p, Timer_RestartTimeout); + peer_timer_stop(p, Timer_RestartTimeout); session_graceful_stop(p); break; default: fatalx("King Bula lost in time"); } } - if ((nextaction = timer_nextduein(p)) != -1 && + if ((nextaction = peer_timer_nextduein(p)) != -1 && nextaction < timeout) timeout = nextaction; @@ -639,11 +640,11 @@ peer_cnt++; - change_state(p, STATE_IDLE, EVNT_NONE); + change_peer_state(p, STATE_IDLE, EVNT_NONE); if (p->conf.down) - timer_stop(p, Timer_IdleHold); /* no autostart */ + peer_timer_stop(p, Timer_IdleHold); /* no autostart */ else - timer_set(p, Timer_IdleHold, 0); /* start ASAP */ + peer_timer_set(p, Timer_IdleHold, 0); /* start ASAP */ /* * on startup, demote if requested. @@ -664,9 +665,9 @@ case STATE_IDLE: switch (event) { case EVNT_START: - timer_stop(peer, Timer_Hold); - timer_stop(peer, Timer_Keepalive); - timer_stop(peer, Timer_IdleHold); + peer_timer_stop(peer, Timer_Hold); + peer_timer_stop(peer, Timer_Keepalive); + peer_timer_stop(peer, Timer_IdleHold); /* allocate read buffer */ peer->rbuf = calloc(1, sizeof(struct ibuf_read)); @@ -688,14 +689,14 @@ peer->stats.last_sent_suberr = 0; if (!peer->depend_ok) - timer_stop(peer, Timer_ConnectRetry); + peer_timer_stop(peer, Timer_ConnectRetry); else if (peer->passive || peer->conf.passive || peer->conf.template) { - change_state(peer, STATE_ACTIVE, event); - timer_stop(peer, Timer_ConnectRetry); + change_peer_state(peer, STATE_ACTIVE, event); + peer_timer_stop(peer, Timer_ConnectRetry); } else { - change_state(peer, STATE_CONNECT, event); - timer_set(peer, Timer_ConnectRetry, + change_peer_state(peer, STATE_CONNECT, event); + peer_timer_set(peer, Timer_ConnectRetry, conf->connectretry); session_connect(peer); } @@ -714,24 +715,24 @@ case EVNT_CON_OPEN: session_tcp_established(peer); session_open(peer); - timer_stop(peer, Timer_ConnectRetry); + peer_timer_stop(peer, Timer_ConnectRetry); peer->holdtime = INTERVAL_HOLD_INITIAL; - start_timer_holdtime(peer); - change_state(peer, STATE_OPENSENT, event); + start_peer_timer_holdtime(peer); + change_peer_state(peer, STATE_OPENSENT, event); break; case EVNT_CON_OPENFAIL: - timer_set(peer, Timer_ConnectRetry, + peer_timer_set(peer, Timer_ConnectRetry, conf->connectretry); session_close_connection(peer); - change_state(peer, STATE_ACTIVE, event); + change_peer_state(peer, STATE_ACTIVE, event); break; case EVNT_TIMER_CONNRETRY: - timer_set(peer, Timer_ConnectRetry, + peer_timer_set(peer, Timer_ConnectRetry, conf->connectretry); session_connect(peer); break; default: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; } break; @@ -743,25 +744,25 @@ case EVNT_CON_OPEN: session_tcp_established(peer); session_open(peer); - timer_stop(peer, Timer_ConnectRetry); + peer_timer_stop(peer, Timer_ConnectRetry); peer->holdtime = INTERVAL_HOLD_INITIAL; - start_timer_holdtime(peer); - change_state(peer, STATE_OPENSENT, event); + start_peer_timer_holdtime(peer); + change_peer_state(peer, STATE_OPENSENT, event); break; case EVNT_CON_OPENFAIL: - timer_set(peer, Timer_ConnectRetry, + peer_timer_set(peer, Timer_ConnectRetry, conf->connectretry); session_close_connection(peer); - change_state(peer, STATE_ACTIVE, event); + change_peer_state(peer, STATE_ACTIVE, event); break; case EVNT_TIMER_CONNRETRY: - timer_set(peer, Timer_ConnectRetry, + peer_timer_set(peer, Timer_ConnectRetry, peer->holdtime); - change_state(peer, STATE_CONNECT, event); + change_peer_state(peer, STATE_CONNECT, event); session_connect(peer); break; default: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; } break; @@ -771,42 +772,42 @@ /* ignore */ break; case EVNT_STOP: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_CON_CLOSED: session_close_connection(peer); - timer_set(peer, Timer_ConnectRetry, + peer_timer_set(peer, Timer_ConnectRetry, conf->connectretry); - change_state(peer, STATE_ACTIVE, event); + change_peer_state(peer, STATE_ACTIVE, event); break; case EVNT_CON_FATAL: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_TIMER_HOLDTIME: session_notification(peer, ERR_HOLDTIMEREXPIRED, 0, NULL, 0); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_RCVD_OPEN: - /* parse_open calls change_state itself on failure */ + /* parse_open calls change_peer_state itself on failure */ if (parse_open(peer)) break; session_keepalive(peer); - change_state(peer, STATE_OPENCONFIRM, event); + change_peer_state(peer, STATE_OPENCONFIRM, event); break; case EVNT_RCVD_NOTIFICATION: if (parse_notification(peer)) { - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); /* don't punish, capa negotiation */ - timer_set(peer, Timer_IdleHold, 0); + peer_timer_set(peer, Timer_IdleHold, 0); peer->IdleHoldTime /= 2; } else - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; default: session_notification(peer, ERR_FSM, ERR_FSM_UNEX_OPENSENT, NULL, 0); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; } break; @@ -816,32 +817,32 @@ /* ignore */ break; case EVNT_STOP: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_CON_CLOSED: case EVNT_CON_FATAL: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_TIMER_HOLDTIME: session_notification(peer, ERR_HOLDTIMEREXPIRED, 0, NULL, 0); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_TIMER_KEEPALIVE: session_keepalive(peer); break; case EVNT_RCVD_KEEPALIVE: - start_timer_holdtime(peer); - change_state(peer, STATE_ESTABLISHED, event); + start_peer_timer_holdtime(peer); + change_peer_state(peer, STATE_ESTABLISHED, event); break; case EVNT_RCVD_NOTIFICATION: parse_notification(peer); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; default: session_notification(peer, ERR_FSM, ERR_FSM_UNEX_OPENCONFIRM, NULL, 0); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; } break; @@ -851,38 +852,38 @@ /* ignore */ break; case EVNT_STOP: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_CON_CLOSED: case EVNT_CON_FATAL: - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_TIMER_HOLDTIME: session_notification(peer, ERR_HOLDTIMEREXPIRED, 0, NULL, 0); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; case EVNT_TIMER_KEEPALIVE: session_keepalive(peer); break; case EVNT_RCVD_KEEPALIVE: - start_timer_holdtime(peer); + start_peer_timer_holdtime(peer); break; case EVNT_RCVD_UPDATE: - start_timer_holdtime(peer); + start_peer_timer_holdtime(peer); if (parse_update(peer)) - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); else - start_timer_holdtime(peer); + start_peer_timer_holdtime(peer); break; case EVNT_RCVD_NOTIFICATION: parse_notification(peer); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; default: session_notification(peer, ERR_FSM, ERR_FSM_UNEX_ESTABLISHED, NULL, 0); - change_state(peer, STATE_IDLE, event); + change_peer_state(peer, STATE_IDLE, event); break; } break; @@ -890,21 +891,21 @@ } void -start_timer_holdtime(struct peer *peer) +start_peer_timer_holdtime(struct peer *peer) { if (peer->holdtime > 0) - timer_set(peer, Timer_Hold, peer->holdtime); + peer_timer_set(peer, Timer_Hold, peer->holdtime); else - timer_stop(peer, Timer_Hold); + peer_timer_stop(peer, Timer_Hold); } void -start_timer_keepalive(struct peer *peer) +start_peer_timer_keepalive(struct peer *peer) { if (peer->holdtime > 0) - timer_set(peer, Timer_Keepalive, peer->holdtime / 3); + peer_timer_set(peer, Timer_Keepalive, peer->holdtime / 3); else - timer_stop(peer, Timer_Keepalive); + peer_timer_stop(peer, Timer_Keepalive); } void @@ -918,7 +919,7 @@ } void -change_state(struct peer *peer, enum session_state state, +change_peer_state(struct peer *peer, enum session_state state, enum session_events event) { struct mrt *mrt; @@ -946,11 +947,11 @@ if (peer->IdleHoldTime == 0) peer->IdleHoldTime = INTERVAL_IDLE_HOLD_INITIAL; peer->holdtime = INTERVAL_HOLD_INITIAL; - timer_stop(peer, Timer_ConnectRetry); - timer_stop(peer, Timer_Keepalive); - timer_stop(peer, Timer_Hold); - timer_stop(peer, Timer_IdleHold); - timer_stop(peer, Timer_IdleHoldReset); + peer_timer_stop(peer, Timer_ConnectRetry); + peer_timer_stop(peer, Timer_Keepalive); + peer_timer_stop(peer, Timer_Hold); + peer_timer_stop(peer, Timer_IdleHold); + peer_timer_stop(peer, Timer_IdleHoldReset); session_close_connection(peer); msgbuf_clear(&peer->wbuf); free(peer->rbuf); @@ -958,7 +959,7 @@ bzero(&peer->capa.peer, sizeof(peer->capa.peer)); if (event != EVNT_STOP) { - timer_set(peer, Timer_IdleHold, peer->IdleHoldTime); + peer_timer_set(peer, Timer_IdleHold, peer->IdleHoldTime); if (event != EVNT_NONE && peer->IdleHoldTime < MAX_IDLE_HOLD/2) peer->IdleHoldTime *= 2; @@ -968,7 +969,7 @@ (event == EVNT_CON_CLOSED || event == EVNT_CON_FATAL)) { /* don't punish graceful restart */ - timer_set(peer, Timer_IdleHold, 0); + peer_timer_set(peer, Timer_IdleHold, 0); peer->IdleHoldTime /= 2; session_graceful_restart(peer); } else @@ -989,11 +990,11 @@ /* do the graceful restart dance */ session_graceful_restart(peer); peer->holdtime = INTERVAL_HOLD_INITIAL; - timer_stop(peer, Timer_ConnectRetry); - timer_stop(peer, Timer_Keepalive); - timer_stop(peer, Timer_Hold); - timer_stop(peer, Timer_IdleHold); - timer_stop(peer, Timer_IdleHoldReset); + peer_timer_stop(peer, Timer_ConnectRetry); + peer_timer_stop(peer, Timer_Keepalive); + peer_timer_stop(peer, Timer_Hold); + peer_timer_stop(peer, Timer_IdleHold); + peer_timer_stop(peer, Timer_IdleHoldReset); session_close_connection(peer); msgbuf_clear(&peer->wbuf); bzero(&peer->capa.peer, sizeof(peer->capa.peer)); @@ -1006,9 +1007,9 @@ case STATE_OPENCONFIRM: break; case STATE_ESTABLISHED: - timer_set(peer, Timer_IdleHoldReset, peer->IdleHoldTime); + peer_timer_set(peer, Timer_IdleHoldReset, peer->IdleHoldTime); if (peer->demoted) - timer_set(peer, Timer_CarpUndemote, + peer_timer_set(peer, Timer_CarpUndemote, INTERVAL_HOLD_DEMOTED); session_up(peer); break; @@ -1016,7 +1017,7 @@ break; } - log_statechange(peer, state, event); + log_peer_statechange(peer, state, event); LIST_FOREACH(mrt, &mrthead, entry) { if (!(mrt->type == MRT_ALL_IN || mrt->type == MRT_ALL_OUT)) continue; @@ -1052,7 +1053,7 @@ p = getpeerbyip((struct sockaddr *)&cliaddr); if (p != NULL && p->state == STATE_IDLE && p->errcnt < 2) { - if (timer_running(p, Timer_IdleHold, NULL)) { + if (peer_timer_running(p, Timer_IdleHold, NULL)) { /* fast reconnect after clear */ p->passive = 1; bgp_fsm(p, EVNT_START); @@ -1107,7 +1108,7 @@ } else if (p != NULL && p->state == STATE_ESTABLISHED && p->capa.neg.grestart.restart == 2) { /* first do the graceful restart dance */ - change_state(p, STATE_CONNECT, EVNT_CON_CLOSED); + change_peer_state(p, STATE_CONNECT, EVNT_CON_CLOSED); /* then do part of the open dance */ goto open; } else { @@ -1562,7 +1563,7 @@ return; } - start_timer_keepalive(p); + start_peer_timer_keepalive(p); p->stats.msg_sent_keepalive++; } @@ -1597,7 +1598,7 @@ return; } - start_timer_keepalive(p); + start_peer_timer_keepalive(p); p->stats.msg_sent_update++; } @@ -1699,7 +1700,7 @@ { u_int8_t i; - timer_set(p, Timer_RestartTimeout, p->capa.neg.grestart.timeout); + peer_timer_set(p, Timer_RestartTimeout, p->capa.neg.grestart.timeout); for (i = 0; i < AID_MAX; i++) { if (p->capa.neg.grestart.flags[i] & CAPA_GR_PRESENT) { @@ -2036,7 +2037,7 @@ rversion = BGP_VERSION; session_notification(peer, ERR_OPEN, ERR_OPEN_VERSION, &rversion, sizeof(rversion)); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } @@ -2053,7 +2054,7 @@ "peer requests unacceptable holdtime %u", holdtime); session_notification(peer, ERR_OPEN, ERR_OPEN_HOLDTIME, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } @@ -2074,7 +2075,7 @@ ntohl(bgpid)); session_notification(peer, ERR_OPEN, ERR_OPEN_BGPID, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } peer->remote_bgpid = bgpid; @@ -2086,7 +2087,7 @@ log_peer_warnx(&peer->conf, "corrupt OPEN message received: length mismatch"); session_notification(peer, ERR_OPEN, 0, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } @@ -2096,7 +2097,7 @@ log_peer_warnx(&peer->conf, "corrupt OPEN message received, len wrong"); session_notification(peer, ERR_OPEN, 0, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } memcpy(&op_type, p, sizeof(op_type)); @@ -2111,7 +2112,7 @@ "corrupt OPEN message received, len wrong"); session_notification(peer, ERR_OPEN, 0, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } op_val = p; @@ -2126,7 +2127,7 @@ &as) == -1) { session_notification(peer, ERR_OPEN, 0, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } break; @@ -2144,8 +2145,8 @@ "parameter: type %u", op_type); session_notification(peer, ERR_OPEN, ERR_OPEN_OPT, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); - timer_set(peer, Timer_IdleHold, 0); /* no punish */ + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + peer_timer_set(peer, Timer_IdleHold, 0); /* no punish */ peer->IdleHoldTime /= 2; return (-1); } @@ -2164,7 +2165,7 @@ log_peer_warnx(&peer->conf, "peer sent wrong AS %s", log_as(as)); session_notification(peer, ERR_OPEN, ERR_OPEN_AS, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } @@ -2172,7 +2173,7 @@ log_peer_warnx(&peer->conf, "capability negotiation calculation failed"); session_notification(peer, ERR_OPEN, 0, NULL, 0); - change_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); + change_peer_state(peer, STATE_IDLE, EVNT_RCVD_OPEN); return (-1); } @@ -2554,7 +2555,7 @@ struct mrt xmrt; struct mrt *mrt; struct peer_config *pconf; - struct peer *p, *next; + struct peer *p, *pnext; struct listen_addr *la, *nla; struct kif *kif; u_char *data; @@ -2711,8 +2712,8 @@ conf->connectretry = nconf->connectretry; /* add new peers */ - for (p = npeers; p != NULL; p = next) { - next = p->next; + for (p = npeers; p != NULL; p = pnext) { + pnext = p->next; p->next = peers; peers = p; } @@ -2883,7 +2884,7 @@ case ERR_CEASE_MAX_PREFIX: bgp_fsm(p, EVNT_STOP); if (p->conf.max_prefix_restart) - timer_set(p, Timer_IdleHold, 60 * + peer_timer_set(p, Timer_IdleHold, 60 * p->conf.max_prefix_restart); break; default: @@ -2918,7 +2919,7 @@ aid2str(aid)); p->capa.neg.grestart.flags[aid] &= ~CAPA_GR_RESTARTING; - timer_stop(p, Timer_RestartTimeout); + peer_timer_stop(p, Timer_RestartTimeout); /* signal back to RDE to cleanup stale routes */ if (imsg_compose(ibuf_rde, diff -u bgpd.orig/session.h bgpd/session.h --- bgpd.orig/session.h Fri Aug 15 18:21:53 2014 +++ bgpd/session.h Fri Aug 15 21:05:56 2014 @@ -38,6 +38,26 @@ #define MSG_PROCESS_LIMIT 25 #define SESSION_CLEAR_DELAY 5 +enum Timer { + Timer_None, + Timer_ConnectRetry, + Timer_Keepalive, + Timer_Hold, + Timer_IdleHold, + Timer_IdleHoldReset, + Timer_CarpUndemote, + Timer_RestartTimeout, + Timer_Max +}; + +struct peer_timer { + TAILQ_ENTRY(peer_timer) entry; + enum Timer type; + time_t val; +}; + +TAILQ_HEAD(peer_timer_head, peer_timer); + enum session_state { STATE_NONE, STATE_IDLE, @@ -173,26 +193,6 @@ u_int8_t last_sent_suberr; }; -enum Timer { - Timer_None, - Timer_ConnectRetry, - Timer_Keepalive, - Timer_Hold, - Timer_IdleHold, - Timer_IdleHoldReset, - Timer_CarpUndemote, - Timer_RestartTimeout, - Timer_Max -}; - -struct peer_timer { - TAILQ_ENTRY(peer_timer) entry; - enum Timer type; - time_t val; -}; - -TAILQ_HEAD(peer_timer_head, peer_timer); - struct peer { struct peer_config conf; struct peer_stats stats; @@ -258,7 +258,7 @@ /* log.c */ char *log_fmt_peer(const struct peer_config *); -void log_statechange(struct peer *, enum session_state, +void log_peer_statechange(struct peer *, enum session_state, enum session_events); void log_notification(const struct peer *, u_int8_t, u_int8_t, u_char *, u_int16_t, const char *); @@ -303,11 +303,11 @@ /* timer.c */ time_t getmonotime(void); -struct peer_timer *timer_get(struct peer *, enum Timer); -struct peer_timer *timer_nextisdue(struct peer *); -time_t timer_nextduein(struct peer *); -int timer_running(struct peer *, enum Timer, time_t *); -void timer_set(struct peer *, enum Timer, u_int); -void timer_stop(struct peer *, enum Timer); -void timer_remove(struct peer *, enum Timer); -void timer_remove_all(struct peer *); +struct peer_timer *peer_timer_get(struct peer *, enum Timer); +struct peer_timer *peer_timer_nextisdue(struct peer *); +time_t peer_timer_nextduein(struct peer *); +int peer_timer_running(struct peer *, enum Timer, time_t *); +void peer_timer_set(struct peer *, enum Timer, u_int); +void peer_timer_stop(struct peer *, enum Timer); +void peer_timer_remove(struct peer *, enum Timer); +void peer_timer_remove_all(struct peer *); diff -u bgpd.orig/timer.c bgpd/timer.c --- bgpd.orig/timer.c Fri Aug 15 18:21:53 2014 +++ bgpd/timer.c Fri Aug 15 21:05:56 2014 @@ -35,7 +35,7 @@ } struct peer_timer * -timer_get(struct peer *p, enum Timer timer) +peer_timer_get(struct peer *p, enum Timer timer) { struct peer_timer *pt; @@ -47,7 +47,7 @@ } struct peer_timer * -timer_nextisdue(struct peer *p) +peer_timer_nextisdue(struct peer *p) { struct peer_timer *pt; @@ -58,7 +58,7 @@ } time_t -timer_nextduein(struct peer *p) +peer_timer_nextduein(struct peer *p) { struct peer_timer *pt; @@ -68,9 +68,9 @@ } int -timer_running(struct peer *p, enum Timer timer, time_t *left) +peer_timer_running(struct peer *p, enum Timer timer, time_t *left) { - struct peer_timer *pt = timer_get(p, timer); + struct peer_timer *pt = peer_timer_get(p, timer); if (pt != NULL && pt->val > 0) { if (left != NULL) @@ -81,13 +81,13 @@ } void -timer_set(struct peer *p, enum Timer timer, u_int offset) +peer_timer_set(struct peer *p, enum Timer timer, u_int offset) { - struct peer_timer *t, *pt = timer_get(p, timer); + struct peer_timer *t, *pt = peer_timer_get(p, timer); if (pt == NULL) { /* have to create */ if ((pt = malloc(sizeof(*pt))) == NULL) - fatal("timer_set"); + fatal("peer_timer_set"); pt->type = timer; } else { if (pt->val == getmonotime() + (time_t)offset) @@ -107,9 +107,9 @@ } void -timer_stop(struct peer *p, enum Timer timer) +peer_timer_stop(struct peer *p, enum Timer timer) { - struct peer_timer *pt = timer_get(p, timer); + struct peer_timer *pt = peer_timer_get(p, timer); if (pt != NULL) { pt->val = 0; @@ -119,9 +119,9 @@ } void -timer_remove(struct peer *p, enum Timer timer) +peer_timer_remove(struct peer *p, enum Timer timer) { - struct peer_timer *pt = timer_get(p, timer); + struct peer_timer *pt = peer_timer_get(p, timer); if (pt != NULL) { TAILQ_REMOVE(&p->timers, pt, entry); @@ -130,7 +130,7 @@ } void -timer_remove_all(struct peer *p) +peer_timer_remove_all(struct peer *p) { struct peer_timer *pt;