• Home
  • History
  • Annotate
  • Raw
  • Download
  • only in /netgear-R7000-V1.0.7.12_1.2.5/ap/gpl/zebra/bgpd/

Lines Matching defs:peer

63 static int bgp_start (struct peer *);
76 bgp_timer_set (struct peer *peer)
80 switch (peer->status)
83 /* First entry point of peer's finite state machine. In Idle
84 status start timer is on unless peer is shutdown or peer is
86 if (CHECK_FLAG (peer->flags, PEER_FLAG_SHUTDOWN)
87 || CHECK_FLAG (peer->sflags, PEER_STATUS_PREFIX_OVERFLOW)
88 || ! peer_active (peer))
90 BGP_TIMER_OFF (peer->t_start);
94 jitter = bgp_start_jitter (peer->v_start);
95 BGP_TIMER_ON (peer->t_start, bgp_start_timer,
96 peer->v_start + jitter);
98 BGP_TIMER_OFF (peer->t_connect);
99 BGP_TIMER_OFF (peer->t_holdtime);
100 BGP_TIMER_OFF (peer->t_keepalive);
101 BGP_TIMER_OFF (peer->t_asorig);
102 BGP_TIMER_OFF (peer->t_routeadv);
106 /* After start timer is expired, the peer moves to Connnect
109 BGP_TIMER_OFF (peer->t_start);
110 BGP_TIMER_ON (peer->t_connect, bgp_connect_timer, peer->v_connect);
111 BGP_TIMER_OFF (peer->t_holdtime);
112 BGP_TIMER_OFF (peer->t_keepalive);
113 BGP_TIMER_OFF (peer->t_asorig);
114 BGP_TIMER_OFF (peer->t_routeadv);
118 /* Active is waiting connection from remote peer. And if
120 BGP_TIMER_OFF (peer->t_start);
121 /* If peer is passive mode, do not set connect timer. */
122 if (CHECK_FLAG (peer->flags, PEER_FLAG_PASSIVE))
124 BGP_TIMER_OFF (peer->t_connect);
128 BGP_TIMER_ON (peer->t_connect, bgp_connect_timer, peer->v_connect);
130 BGP_TIMER_OFF (peer->t_holdtime);
131 BGP_TIMER_OFF (peer->t_keepalive);
132 BGP_TIMER_OFF (peer->t_asorig);
133 BGP_TIMER_OFF (peer->t_routeadv);
138 BGP_TIMER_OFF (peer->t_start);
139 BGP_TIMER_OFF (peer->t_connect);
140 if (peer->v_holdtime != 0)
142 BGP_TIMER_ON (peer->t_holdtime, bgp_holdtime_timer,
143 peer->v_holdtime);
147 BGP_TIMER_OFF (peer->t_holdtime);
149 BGP_TIMER_OFF (peer->t_keepalive);
150 BGP_TIMER_OFF (peer->t_asorig);
151 BGP_TIMER_OFF (peer->t_routeadv);
156 BGP_TIMER_OFF (peer->t_start);
157 BGP_TIMER_OFF (peer->t_connect);
161 if (peer->v_holdtime == 0)
163 BGP_TIMER_OFF (peer->t_holdtime);
164 BGP_TIMER_OFF (peer->t_keepalive);
168 BGP_TIMER_ON (peer->t_holdtime, bgp_holdtime_timer,
169 peer->v_holdtime);
170 BGP_TIMER_ON (peer->t_keepalive, bgp_keepalive_timer,
171 peer->v_keepalive);
173 BGP_TIMER_OFF (peer->t_asorig);
174 BGP_TIMER_OFF (peer->t_routeadv);
180 BGP_TIMER_OFF (peer->t_start);
181 BGP_TIMER_OFF (peer->t_connect);
185 if (peer->v_holdtime == 0)
187 BGP_TIMER_OFF (peer->t_holdtime);
188 BGP_TIMER_OFF (peer->t_keepalive);
192 BGP_TIMER_ON (peer->t_holdtime, bgp_holdtime_timer,
193 peer->v_holdtime);
194 BGP_TIMER_ON (peer->t_keepalive, bgp_keepalive_timer,
195 peer->v_keepalive);
197 BGP_TIMER_OFF (peer->t_asorig);
207 struct peer *peer;
209 peer = THREAD_ARG (thread);
210 peer->t_start = NULL;
213 zlog (peer->log, LOG_DEBUG,
214 "%s [FSM] Timer (start timer expire).", peer->host);
226 struct peer *peer;
228 peer = THREAD_ARG (thread);
229 peer->t_connect = NULL;
232 zlog (peer->log, LOG_DEBUG, "%s [FSM] Timer (connect timer expire)",
233 peer->host);
245 struct peer *peer;
247 peer = THREAD_ARG (thread);
248 peer->t_holdtime = NULL;
251 zlog (peer->log, LOG_DEBUG,
253 peer->host);
265 struct peer *peer;
267 peer = THREAD_ARG (thread);
268 peer->t_keepalive = NULL;
271 zlog (peer->log, LOG_DEBUG,
273 peer->host);
284 struct peer *peer;
286 peer = THREAD_ARG (thread);
287 peer->t_routeadv = NULL;
290 zlog (peer->log, LOG_DEBUG,
292 peer->host);
294 peer->synctime = time (NULL);
296 BGP_WRITE_ON (peer->t_write, bgp_write, peer->fd);
298 BGP_TIMER_ON (peer->t_routeadv, bgp_routeadv_timer,
299 peer->v_routeadv);
306 bgp_uptime_reset (struct peer *peer)
308 peer->uptime = time (NULL);
311 /* Administrative BGP peer stop event. */
313 bgp_stop (struct peer *peer)
321 if (peer->status == Established)
324 peer->dropped++;
325 bgp_fsm_change_status (peer, Idle);
327 bgpTrapBackwardTransition (peer);
332 bgp_uptime_reset (peer);
334 /* Need of clear of peer. */
336 bgp_clear_route_all (peer);
339 BGP_READ_OFF (peer->t_read);
340 BGP_WRITE_OFF (peer->t_write);
343 BGP_TIMER_OFF (peer->t_start);
344 BGP_TIMER_OFF (peer->t_connect);
345 BGP_TIMER_OFF (peer->t_holdtime);
346 BGP_TIMER_OFF (peer->t_keepalive);
347 BGP_TIMER_OFF (peer->t_asorig);
348 BGP_TIMER_OFF (peer->t_routeadv);
350 /* Delete all existing events of the peer. */
351 BGP_EVENT_DELETE (peer);
354 peer->packet_size = 0;
357 if (peer->ibuf)
358 stream_reset (peer->ibuf);
359 if (peer->work)
360 stream_reset (peer->work);
361 stream_fifo_clean (peer->obuf);
364 if (peer->fd >= 0)
366 close (peer->fd);
367 peer->fd = -1;
371 if (peer->su_local)
373 XFREE (MTYPE_SOCKUNION, peer->su_local);
374 peer->su_local = NULL;
377 if (peer->su_remote)
379 XFREE (MTYPE_SOCKUNION, peer->su_remote);
380 peer->su_remote = NULL;
384 peer->remote_id.s_addr = 0;
387 peer->afc_nego[AFI_IP][SAFI_UNICAST] = 0;
388 peer->afc_nego[AFI_IP][SAFI_MULTICAST] = 0;
389 peer->afc_nego[AFI_IP][SAFI_MPLS_VPN] = 0;
390 peer->afc_nego[AFI_IP6][SAFI_UNICAST] = 0;
391 peer->afc_nego[AFI_IP6][SAFI_MULTICAST] = 0;
392 peer->afc_adv[AFI_IP][SAFI_UNICAST] = 0;
393 peer->afc_adv[AFI_IP][SAFI_MULTICAST] = 0;
394 peer->afc_adv[AFI_IP][SAFI_MPLS_VPN] = 0;
395 peer->afc_adv[AFI_IP6][SAFI_UNICAST] = 0;
396 peer->afc_adv[AFI_IP6][SAFI_MULTICAST] = 0;
397 peer->afc_recv[AFI_IP][SAFI_UNICAST] = 0;
398 peer->afc_recv[AFI_IP][SAFI_MULTICAST] = 0;
399 peer->afc_recv[AFI_IP][SAFI_MPLS_VPN] = 0;
400 peer->afc_recv[AFI_IP6][SAFI_UNICAST] = 0;
401 peer->afc_recv[AFI_IP6][SAFI_MULTICAST] = 0;
404 UNSET_FLAG (peer->cap, PEER_CAP_REFRESH_ADV);
405 UNSET_FLAG (peer->cap, PEER_CAP_REFRESH_OLD_RCV);
406 UNSET_FLAG (peer->cap, PEER_CAP_REFRESH_NEW_RCV);
407 UNSET_FLAG (peer->cap, PEER_CAP_DYNAMIC_ADV);
408 UNSET_FLAG (peer->cap, PEER_CAP_DYNAMIC_RCV);
413 /* peer address family capability flags*/
414 peer->af_cap[afi][safi] = 0;
415 /* peer address family status flags*/
416 peer->af_sflags[afi][safi] = 0;
418 peer->orf_plist[afi][safi] = NULL;
420 sprintf (orf_name, "%s.%d.%d", peer->host, afi, safi);
424 UNSET_FLAG (peer->af_flags[AFI_IP][SAFI_UNICAST],
426 UNSET_FLAG (peer->af_flags[AFI_IP][SAFI_MULTICAST],
428 UNSET_FLAG (peer->af_flags[AFI_IP6][SAFI_UNICAST],
430 UNSET_FLAG (peer->af_flags[AFI_IP6][SAFI_MULTICAST],
434 if (CHECK_FLAG (peer->config, PEER_CONFIG_TIMER))
436 peer->v_keepalive = peer->keepalive;
437 peer->v_holdtime = peer->holdtime;
441 peer->v_keepalive = peer->bgp->default_keepalive;
442 peer->v_holdtime = peer->bgp->default_holdtime;
445 peer->update_time = 0;
451 peer->pcount[AFI_IP][SAFI_UNICAST] = 0;
452 peer->pcount[AFI_IP][SAFI_MULTICAST] = 0;
453 peer->pcount[AFI_IP][SAFI_MPLS_VPN] = 0;
454 peer->pcount[AFI_IP6][SAFI_UNICAST] = 0;
455 peer->pcount[AFI_IP6][SAFI_MULTICAST] = 0;
461 /* BGP peer is stoped by the error. */
463 bgp_stop_with_error (struct peer *peer)
466 peer->v_start *= 2;
469 if (peer->v_start >= (60 * 2))
470 peer->v_start = (60 * 2);
472 bgp_stop (peer);
477 /* TCP connection open. Next we send open message to remote peer. And
480 bgp_connect_success (struct peer *peer)
482 if (peer->fd < 0)
484 zlog_err ("bgp_connect_success peer's fd is negative value %d",
485 peer->fd);
488 BGP_READ_ON (peer->t_read, bgp_read, peer->fd);
490 /* bgp_getsockname (peer); */
492 if (! CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
493 bgp_open_send (peer);
500 bgp_connect_fail (struct peer *peer)
502 bgp_stop (peer);
507 try to connect to remote peer with non-blocking IO. */
509 bgp_start (struct peer *peer)
513 /* If the peer is passive mode, force to move to Active mode. */
514 if (CHECK_FLAG (peer->flags, PEER_FLAG_PASSIVE))
516 BGP_EVENT_ADD (peer, TCP_connection_open_failed);
520 status = bgp_connect (peer);
526 plog_info (peer->log, "%s [FSM] Connect error", peer->host);
527 BGP_EVENT_ADD (peer, TCP_connection_open_failed);
531 plog_info (peer->log, "%s [FSM] Connect immediately success",
532 peer->host);
533 BGP_EVENT_ADD (peer, TCP_connection_open);
539 plog_info (peer->log, "%s [FSM] Non blocking connect waiting result",
540 peer->host);
541 if (peer->fd < 0)
543 zlog_err ("bgp_start peer's fd is negative value %d",
544 peer->fd);
547 BGP_READ_ON (peer->t_read, bgp_read, peer->fd);
548 BGP_WRITE_ON (peer->t_write, bgp_write, peer->fd);
554 /* Connect retry timer is expired when the peer status is Connect. */
556 bgp_reconnect (struct peer *peer)
558 bgp_stop (peer);
559 bgp_start (peer);
564 bgp_fsm_open (struct peer *peer)
567 bgp_keepalive_send (peer);
570 BGP_TIMER_OFF (peer->t_holdtime);
578 bgp_fsm_change_status (struct peer *peer, int status)
580 bgp_dump_state (peer, peer->status, status);
583 peer->ostatus = peer->status;
584 peer->status = status;
587 /* Keepalive send to peer. */
589 bgp_fsm_keepalive_expire (struct peer *peer)
591 bgp_keepalive_send (peer);
596 peer and change to Idle status. */
598 bgp_fsm_holdtime_expire (struct peer *peer)
601 zlog (peer->log, LOG_DEBUG, "%s [FSM] Hold timer expire", peer->host);
603 /* Send notify to remote peer. */
604 bgp_notify_send (peer, BGP_NOTIFY_HOLD_ERR, 0);
606 /* Sweep if it is temporary peer. */
607 if (CHECK_FLAG (peer->sflags, PEER_STATUS_ACCEPT_PEER))
609 zlog_info ("%s [Event] Accepting BGP peer is deleted", peer->host);
610 peer_delete (peer);
620 bgp_establish (struct peer *peer)
627 if (! CHECK_FLAG (peer->sflags, PEER_STATUS_CAPABILITY_OPEN))
628 SET_FLAG (peer->sflags, PEER_STATUS_CAPABILITY_OPEN);
631 notify = &peer->notify;
637 peer->v_start = BGP_INIT_START_TIMER;
640 peer->established++;
641 bgp_fsm_change_status (peer, Established);
643 bgpTrapEstablished (peer);
647 bgp_uptime_reset (peer);
652 if (CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_ADV))
654 if (CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_RCV))
655 bgp_route_refresh_send (peer, afi, safi, ORF_TYPE_PREFIX,
657 else if (CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_OLD_RCV))
658 bgp_route_refresh_send (peer, afi, safi, ORF_TYPE_PREFIX_OLD,
662 if (peer->v_keepalive)
663 bgp_keepalive_send (peer);
668 if (CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_RM_ADV))
669 if (CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_RCV)
670 || CHECK_FLAG (peer->af_cap[afi][safi], PEER_CAP_ORF_PREFIX_SM_OLD_RCV))
671 SET_FLAG (peer->af_sflags[afi][safi], PEER_STATUS_ORF_WAIT_REFRESH);
673 bgp_announce_route_all (peer);
675 BGP_TIMER_ON (peer->t_routeadv, bgp_routeadv_timer, 1);
682 bgp_fsm_keepalive (struct peer *peer)
684 /* peer count update */
685 peer->keepalive_in++;
687 BGP_TIMER_OFF (peer->t_holdtime);
693 bgp_fsm_update (struct peer *peer)
695 BGP_TIMER_OFF (peer->t_holdtime);
701 bgp_ignore (struct peer *peer)
704 zlog (peer->log, LOG_DEBUG, "%s [FSM] bgp_ignore called", peer->host);
840 struct peer *peer;
842 peer = THREAD_ARG (thread);
846 next = FSM [peer->status -1][event - 1].next_state;
849 plog_info (peer->log, "%s [FSM] %s (%s->%s)", peer->host,
851 LOOKUP (bgp_status_msg, peer->status),
854 && strcmp (LOOKUP (bgp_status_msg, peer->status), LOOKUP (bgp_status_msg, next)))
856 peer->host,
857 LOOKUP (bgp_status_msg, peer->status),
861 ret = (*(FSM [peer->status - 1][event - 1].func))(peer);
868 if (next != peer->status)
869 bgp_fsm_change_status (peer, next);
872 bgp_timer_set (peer);