@@ -69,7 +69,7 @@ const (
6969	podSubnetIpSetName    =  "kube-router-pod-subnets" 
7070)
7171
72- // Run runs forever till  until we are notified on stop channel 
72+ // Run runs forever until we are notified on stop channel 
7373func  (nrc  * NetworkRoutingController ) Run (stopCh  <- chan  struct {}, wg  * sync.WaitGroup ) {
7474	cidr , err  :=  utils .GetPodCidrFromCniSpec ("/etc/cni/net.d/10-kuberouter.conf" )
7575	if  err  !=  nil  {
@@ -158,6 +158,8 @@ func (nrc *NetworkRoutingController) Run(stopCh <-chan struct{}, wg *sync.WaitGr
158158		}
159159	}
160160
161+ 	defer  nrc .bgpServer .Stop ()
162+ 
161163	// loop forever till notified to stop on stopCh 
162164	for  {
163165		select  {
@@ -883,10 +885,21 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
883885	g  :=  bgpapi .NewGrpcServer (nrc .bgpServer , ":50051" )
884886	go  g .Serve ()
885887
888+ 	var  localAddressList  []string 
889+ 
890+ 	if  ipv4IsEnabled () {
891+ 		localAddressList  =  append (localAddressList , "0.0.0.0" )
892+ 	}
893+ 
894+ 	if  ipv6IsEnabled () {
895+ 		localAddressList  =  append (localAddressList , "::" )
896+ 	}
897+ 
886898	global  :=  & config.Global {
887899		Config : config.GlobalConfig {
888- 			As :       nodeAsnNumber ,
889- 			RouterId : nrc .nodeIP .String (),
900+ 			As :               nodeAsnNumber ,
901+ 			RouterId :         nrc .nodeIP .String (),
902+ 			LocalAddressList : localAddressList ,
890903		},
891904	}
892905
@@ -907,6 +920,7 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
907920				},
908921			}
909922			if  err  :=  nrc .bgpServer .AddNeighbor (n ); err  !=  nil  {
923+ 				nrc .bgpServer .Stop ()
910924				return  errors .New ("Failed to peer with global peer router \" "  +  peer  +  "\"  due to: "  +  err .Error ())
911925			}
912926		}
@@ -918,6 +932,7 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
918932		}
919933		asnNo , err  :=  strconv .ParseUint (nodeBgpPeerAsn , 0 , 32 )
920934		if  err  !=  nil  {
935+ 			nrc .bgpServer .Stop ()
921936			return  errors .New ("Failed to parse ASN number specified for the the node in the annotations" )
922937		}
923938		peerAsnNo  :=  uint32 (asnNo )
@@ -932,12 +947,14 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
932947			ips  :=  strings .Split (nodeBgpPeersAnnotation , "," )
933948			for  _ , ip  :=  range  ips  {
934949				if  net .ParseIP (ip ) ==  nil  {
950+ 					nrc .bgpServer .Stop ()
935951					return  errors .New ("Invalid node BGP peer router ip in the annotation: "  +  ip )
936952				}
937953			}
938954			nodePeerRouters  =  append (nodePeerRouters , ips ... )
939955		} else  {
940956			if  net .ParseIP (nodeBgpPeersAnnotation ) ==  nil  {
957+ 				nrc .bgpServer .Stop ()
941958				return  errors .New ("Invalid node BGP peer router ip: "  +  nodeBgpPeersAnnotation )
942959			}
943960			nodePeerRouters  =  append (nodePeerRouters , nodeBgpPeersAnnotation )
@@ -951,6 +968,7 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
951968				},
952969			}
953970			if  err  :=  nrc .bgpServer .AddNeighbor (n ); err  !=  nil  {
971+ 				nrc .bgpServer .Stop ()
954972				return  errors .New ("Failed to peer with node specific BGP peer router: "  +  peer  +  " due to "  +  err .Error ())
955973			}
956974		}
@@ -962,6 +980,26 @@ func (nrc *NetworkRoutingController) startBgpServer() error {
962980	return  nil 
963981}
964982
983+ func  ipv4IsEnabled () bool  {
984+ 	l , err  :=  net .Listen ("tcp4" , "" )
985+ 	if  err  !=  nil  {
986+ 		return  false 
987+ 	}
988+ 	l .Close ()
989+ 
990+ 	return  true 
991+ }
992+ 
993+ func  ipv6IsEnabled () bool  {
994+ 	l , err  :=  net .Listen ("tcp6" , "" )
995+ 	if  err  !=  nil  {
996+ 		return  false 
997+ 	}
998+ 	l .Close ()
999+ 
1000+ 	return  true 
1001+ }
1002+ 
9651003func  getNodeSubnet (nodeIp  net.IP ) (net.IPNet , string , error ) {
9661004	links , err  :=  netlink .LinkList ()
9671005	if  err  !=  nil  {
0 commit comments