@@ -39,11 +39,21 @@ type agent struct {
3939 networkDB * networkdb.NetworkDB
4040 bindAddr string
4141 advertiseAddr string
42+ dataPathAddr string
4243 epTblCancel func ()
4344 driverCancelFuncs map [string ][]func ()
4445 sync.Mutex
4546}
4647
48+ func (a * agent ) dataPathAddress () string {
49+ a .Lock ()
50+ defer a .Unlock ()
51+ if a .dataPathAddr != "" {
52+ return a .dataPathAddr
53+ }
54+ return a .advertiseAddr
55+ }
56+
4757const libnetworkEPTable = "endpoint_table"
4858
4959func getBindAddr (ifaceName string ) (string , error ) {
@@ -196,14 +206,16 @@ func (c *controller) agentSetup() error {
196206
197207 bindAddr := clusterProvider .GetLocalAddress ()
198208 advAddr := clusterProvider .GetAdvertiseAddress ()
209+ dataAddr := clusterProvider .GetDataPathAddress ()
199210 remote := clusterProvider .GetRemoteAddress ()
200211 remoteAddr , _ , _ := net .SplitHostPort (remote )
201212 listen := clusterProvider .GetListenAddress ()
202213 listenAddr , _ , _ := net .SplitHostPort (listen )
203214
204- logrus .Infof ("Initializing Libnetwork Agent Listen-Addr=%s Local-addr=%s Adv-addr=%s Remote-addr =%s" , listenAddr , bindAddr , advAddr , remoteAddr )
215+ logrus .Infof ("Initializing Libnetwork Agent Listen-Addr=%s Local-addr=%s Adv-addr=%s Data-addr=%s Remote-addr=%s" ,
216+ listenAddr , bindAddr , advAddr , dataAddr , remoteAddr )
205217 if advAddr != "" && agent == nil {
206- if err := c .agentInit (listenAddr , bindAddr , advAddr ); err != nil {
218+ if err := c .agentInit (listenAddr , bindAddr , advAddr , dataAddr ); err != nil {
207219 logrus .Errorf ("Error in agentInit : %v" , err )
208220 } else {
209221 c .drvRegistry .WalkDrivers (func (name string , driver driverapi.Driver , capability driverapi.Capability ) bool {
@@ -269,7 +281,7 @@ func (c *controller) getPrimaryKeyTag(subsys string) ([]byte, uint64, error) {
269281 return keys [1 ].Key , keys [1 ].LamportTime , nil
270282}
271283
272- func (c * controller ) agentInit (listenAddr , bindAddrOrInterface , advertiseAddr string ) error {
284+ func (c * controller ) agentInit (listenAddr , bindAddrOrInterface , advertiseAddr , dataPathAddr string ) error {
273285 if ! c .isAgent () {
274286 return nil
275287 }
@@ -303,6 +315,7 @@ func (c *controller) agentInit(listenAddr, bindAddrOrInterface, advertiseAddr st
303315 networkDB : nDB ,
304316 bindAddr : bindAddr ,
305317 advertiseAddr : advertiseAddr ,
318+ dataPathAddr : dataPathAddr ,
306319 epTblCancel : cancel ,
307320 driverCancelFuncs : make (map [string ][]func ()),
308321 }
@@ -343,25 +356,22 @@ func (c *controller) agentDriverNotify(d driverapi.Driver) {
343356 return
344357 }
345358
346- d .DiscoverNew (discoverapi .NodeDiscovery , discoverapi.NodeDiscoveryData {
347- Address : agent .advertiseAddr ,
359+ if err := d .DiscoverNew (discoverapi .NodeDiscovery , discoverapi.NodeDiscoveryData {
360+ Address : agent .dataPathAddress () ,
348361 BindAddress : agent .bindAddr ,
349362 Self : true ,
350- })
363+ }); err != nil {
364+ logrus .Warnf ("Failed the node discovery in driver: %v" , err )
365+ }
351366
352367 drvEnc := discoverapi.DriverEncryptionConfig {}
353368 keys , tags := c .getKeys (subsysIPSec )
354369 drvEnc .Keys = keys
355370 drvEnc .Tags = tags
356371
357- c .drvRegistry .WalkDrivers (func (name string , driver driverapi.Driver , capability driverapi.Capability ) bool {
358- err := driver .DiscoverNew (discoverapi .EncryptionKeysConfig , drvEnc )
359- if err != nil {
360- logrus .Warnf ("Failed to set datapath keys in driver %s: %v" , name , err )
361- }
362- return false
363- })
364-
372+ if err := d .DiscoverNew (discoverapi .EncryptionKeysConfig , drvEnc ); err != nil {
373+ logrus .Warnf ("Failed to set datapath keys in driver: %v" , err )
374+ }
365375}
366376
367377func (c * controller ) agentClose () {
0 commit comments