React to TcpMd5SignatureOption in NeighborsReactor 98/53798/4
authorJose-Santos Pulido Garcia <jose.santos.pulido.garcia@ericsson.com>
Mon, 27 Mar 2017 14:56:02 +0000 (16:56 +0200)
committerSam Hague <shague@redhat.com>
Tue, 28 Mar 2017 17:24:49 +0000 (17:24 +0000)
When 'ebgp:bgp/neighbors' contains a 'tcp-md5-signature-option'
'BgpConfigurationManager.NeighborsReactor.add' adds a neighbor with
password.

See spec qbgp-tcp-md5-signature-option [0].

[0] https://git.opendaylight.org/gerrit/#/c/52218 Ibdb0675c0045754e575b73deba2dfebde4b56bc5

Change-Id: I892a2f989886c40d8957ccb6e681301e78117c90
Signed-off-by: Jose-Santos Pulido Garcia <jose.santos.pulido.garcia@ericsson.com>
vpnservice/bgpmanager/bgpmanager-impl/src/main/java/org/opendaylight/netvirt/bgpmanager/BgpConfigurationManager.java

index 6a11078e61a9fe26f4e9ce24d31951729c7c5b17..d14b8b7ec5cccda986e6ba151cc91cc509d54ded 100755 (executable)
@@ -121,6 +121,7 @@ import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev1509
 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.neighbors.UpdateSource;
 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.bgp.neighbors.UpdateSourceBuilder;
 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.tcp.security.option.grouping.TcpSecurityOption;
+import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.tcp.security.option.grouping.tcp.security.option.TcpMd5SignatureOption;
 import org.opendaylight.yang.gen.v1.urn.ericsson.params.xml.ns.yang.ebgp.rev150901.tcp.security.option.grouping.tcp.security.option.TcpMd5SignatureOptionBuilder;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.IpAddress;
 import org.opendaylight.yang.gen.v1.urn.ietf.params.xml.ns.yang.ietf.inet.types.rev130715.Ipv4Address;
@@ -735,6 +736,7 @@ public class BgpConfigurationManager {
             synchronized (BgpConfigurationManager.this) {
                 String peerIp = val.getAddress().getValue();
                 long as = val.getRemoteAs();
+                final String md5Secret = extractMd5Secret(val);
                 BgpRouter br = getClient(YANG_OBJ);
                 if (br == null) {
                     LOG.error("{} Unable to process add for peer {} as {}; {}", YANG_OBJ, peerIp, as,
@@ -743,7 +745,7 @@ public class BgpConfigurationManager {
                 }
                 try {
                     //itmProvider.buildTunnelsToDCGW(new IpAddress(peerIp.toCharArray()));
-                    br.addNeighbor(peerIp, as);
+                    br.addNeighbor(peerIp, as, md5Secret);
 
                 } catch (TException | BgpRouterException e) {
                     LOG.error("{} Add received exception; {}", YANG_OBJ, ADD_WARN, e);
@@ -2430,4 +2432,17 @@ public class BgpConfigurationManager {
     private static String extractNextHop(String prefixNextHop) {
         return prefixNextHop.split(":")[1];
     }
+
+    private static String extractMd5Secret(final Neighbors val) {
+        String md5Secret = null;
+        TcpSecurityOption tcpSecOpt = val.getTcpSecurityOption();
+        if (tcpSecOpt != null) {
+            if (tcpSecOpt instanceof TcpMd5SignatureOption) {
+                md5Secret = ((TcpMd5SignatureOption) tcpSecOpt).getTcpMd5SignaturePassword().getValue();
+            } else { // unknown TcpSecurityOption
+                LOG.debug("neighbors  Ignored unknown tcp-security-option of peer {}", val.getAddress().getValue());
+            }
+        }
+        return md5Secret;
+    } // private method extractMd5Secret
 }