Bug 8228 - metadata service fix made cleaner
[groupbasedpolicy.git] / renderers / vpp / src / main / java / org / opendaylight / groupbasedpolicy / renderer / vpp / policy / acl / SourceMapper.java
index 28b03d8f9825896dd8d214f755e6786991c8ced9..a163f09a3bfcadde00bb15d11c21e82de06f13f3 100644 (file)
@@ -23,8 +23,6 @@ import org.slf4j.LoggerFactory;
 class SourceMapper extends AddressMapper {
 
     private static final Logger LOG = LoggerFactory.getLogger(SourceMapper.class);
-    private static final String METADATA_IP_PREFIX = "169.254.169.254/32";
-    private static final String OUT__METADATA = "Out__METADATA";
 
     SourceMapper(ACE_DIRECTION direction) {
         super(direction);
@@ -39,30 +37,22 @@ class SourceMapper extends AddressMapper {
 
     @Override
     void updateRule(AddressEndpointWithLocation addrEp, GbpAceBuilder aclRuleBuilder) {
-        if (!EndpointUtils.getParentEndpoints(addrEp.getParentEndpointChoice()).isEmpty()) {
-            // TODO more parents
+        String address;
+        if (addrEp.getContextType().isAssignableFrom(L3Context.class)) {
+            address = addrEp.getAddress();
+        } else {
             ParentEndpoint parentEp = EndpointUtils.getParentEndpoints(addrEp.getParentEndpointChoice()).get(0);
-            if (parentEp != null && parentEp.getContextType().isAssignableFrom(L3Context.class)) {
-                // TODO this is a fix for metadata agent in DHCP namespace, when we will fully support multiple IPs
-                // per interface we shall rework this
-                if (aclRuleBuilder.getName().contains(OUT__METADATA)) {
-                    LOG.trace("Setting src IP address {} in rule {}", METADATA_IP_PREFIX, aclRuleBuilder);
-                    try {
-                        AccessListUtil.setSourceL3Address(aclRuleBuilder, METADATA_IP_PREFIX);
-                    } catch (UnknownHostException e) {
-                        LOG.error("Failed to parse address {}. Cannot apply ACL entry {}. {}", METADATA_IP_PREFIX,
-                            aclRuleBuilder, e);
-                    }
-                } else {
-                    LOG.trace("Setting src IP address {} in rule {}", parentEp.getAddress(), aclRuleBuilder);
-                    try {
-                        AccessListUtil.setSourceL3Address(aclRuleBuilder, parentEp.getAddress());
-                    } catch (UnknownHostException e) {
-                        LOG.error("Failed to parse address {}. Cannot apply ACL entry {}. {}", parentEp.getAddress(),
-                            aclRuleBuilder, e);
-                    }
-                }
+            if (parentEp == null || !parentEp.getContextType().isAssignableFrom(L3Context.class)) {
+                LOG.warn("Cannot resolve IP address for endpoint {}", addrEp);
+                return;
             }
+            address = parentEp.getAddress();
+        }
+        LOG.trace("Setting src IP address {} in rule {}", address, aclRuleBuilder);
+        try {
+            AccessListUtil.setSourceL3Address(aclRuleBuilder, address);
+        } catch (UnknownHostException e) {
+            LOG.error("Failed to parse address {}. Cannot apply ACL entry {}. {}", address, aclRuleBuilder, e);
         }
     }
 }