Bug 4046: Fix EID Record in SMRs 51/24451/1
authorLorand Jakab <lojakab@cisco.com>
Thu, 23 Jul 2015 00:04:56 +0000 (17:04 -0700)
committerVina Ermagan <vermagan@cisco.com>
Thu, 23 Jul 2015 01:41:53 +0000 (01:41 +0000)
Change-Id: I6712d47c7b3f877d01143b77203afffd47aaf812
Signed-off-by: Lorand Jakab <lojakab@cisco.com>
(cherry picked from commit 65e3afef3b1362821dd4c54b3f9b18ab91069dac)

mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/LispMappingService.java
mappingservice/implementation/src/main/java/org/opendaylight/lispflowmapping/implementation/lisp/MapServer.java

index bf47a9db96acf4a145bb46eedf7152d26d93bf83..dc3c74fd4c0c56968dc7b599101806397e429fef 100644 (file)
@@ -415,7 +415,11 @@ public class LispMappingService implements IFlowMapping, IFlowMappingShell, Bind
     }
 
     public void handleSMR(MapRequest smr, LispAddressContainer subscriber) {
-        LOG.debug("Sending SMR to " + subscriber.toString());
+        LOG.debug("Sending SMR to {} with Source-EID {} and EID Record {}",
+                LispAddressStringifier.getString(subscriber),
+                LispAddressStringifier.getString(smr.getSourceEid().getLispAddressContainer()),
+                LispAddressStringifier.getString(smr.getEidRecord().get(0).getLispAddressContainer(),
+                        smr.getEidRecord().get(0).getMask()));
         SendMapRequestInputBuilder smrib = new SendMapRequestInputBuilder();
         smrib.setMapRequest(new MapRequestBuilder(smr).build());
         smrib.setTransportAddress(LispNotificationHelper.getTransportAddressFromContainer(subscriber));
index a2fb2720d7d91d1d536c23421949bc9536f2e7bf..f374b6f29df114cc8685edfa817f1aa1da6fe4b8 100644 (file)
@@ -113,12 +113,7 @@ public class MapServer extends AbstractLispComponent implements IMapServerAsync
         builder.setSmr(true);
         builder.setSmrInvoked(false);
 
-        builder.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidrecords.EidRecord>());
-        // The address stored in the SMR's EID record is used as Source EID in the SMR-invoked Map-Request. To
-        // ensure consistent behavior it is set to the value used to originally request a given mapping
-        builder.getEidRecord().add(new EidRecordBuilder()
-                    .setMask((short)MaskUtil.getMaxMask(LispAFIConvertor.toAFI(srcEid)))
-                    .setLispAddressContainer(srcEid).build());
+        builder.setSourceEid(new SourceEidBuilder().setLispAddressContainer(srcEid).build());
         builder.setItrRloc(new ArrayList<ItrRloc>());
         builder.getItrRloc().add(new ItrRlocBuilder().setLispAddressContainer(LispAFIConvertor.toContainer(getLocalAddress())).build());
         builder.setMapReply(null);
@@ -323,7 +318,7 @@ public class MapServer extends AbstractLispComponent implements IMapServerAsync
         if (subscribers == null) {
             return;
         }
-        MapRequestBuilder mrb = buildSMR(subscribers.iterator().next().getSrcEid());
+        MapRequestBuilder mrb = buildSMR(record.getLispAddressContainer());
         LOG.trace("Built SMR packet: " + mrb.build().toString());
         for (MappingServiceSubscriberRLOC subscriber : subscribers) {
             if (subscriber.timedOut()) {
@@ -331,8 +326,12 @@ public class MapServer extends AbstractLispComponent implements IMapServerAsync
                 subscribers.remove(subscriber);
             } else {
                 try {
-                    // The Source EID in a SMR is used as EID record in the SMR-invoked Map-Request.
-                    mrb.setSourceEid(new SourceEidBuilder().setLispAddressContainer(record.getLispAddressContainer()).build());
+                    // The address stored in the SMR's EID record is used as Source EID in the SMR-invoked Map-Request. To
+                    // ensure consistent behavior it is set to the value used to originally request a given mapping
+                    mrb.setEidRecord(new ArrayList<org.opendaylight.yang.gen.v1.urn.opendaylight.lfm.control.plane.rev150314.eidrecords.EidRecord>());
+                    mrb.getEidRecord().add(new EidRecordBuilder()
+                                .setMask((short)MaskUtil.getMaxMask(LispAFIConvertor.toAFI(subscriber.getSrcEid())))
+                                .setLispAddressContainer(subscriber.getSrcEid()).build());
                     callback.handleSMR(mrb.build(), subscriber.getSrcRloc());
                 } catch (Exception e) {
                     LOG.error("Errors encountered while handling SMR:" + ExceptionUtils.getStackTrace(e));