namespace "urn:opendaylight:params:xml:ns:yang:vpnintent";
prefix "vpnintent";
+ import ietf-yang-types { prefix yang; revision-date "2010-09-24";}
import ietf-inet-types { prefix inet; revision-date 2010-09-24;}
revision "2015-01-05" {
type string;
description "Switch and port ID that VPN member is connected to.";
}
+
+ leaf next-hop-mac {
+ type yang:mac-address;
+ description "server mac address";
+ }
}
grouping labels {
private String SWITCH_PORT_ID_PROPERTY = "switch_port";
private String MPLS_LABEL_PROPERTY = "mpls_label";
private String NEXT_HOP_PROPERTY = "next_hop";
+ private String SERVER_MAC_ADDRESS = "server_mac_address";
public MappingServiceManager(IntentMappingService intentMappingService) {
Preconditions.checkNotNull(intentMappingService);
* @param ipPrefix
* Ip prefix of the member
* @param switchPortId
- * Switch ID and port ID (i.e. openflow:1:2)
+ * Switch ID and port ID (i.e. openflow:1:2)
* @param mplsLabel
- * MPLS label, if needed
- * @param nextHop
- * Next hop in the route
+* MPLS label, if needed
+ * @param nextHop Next Hop
+ * @param serverMacAddress Server MAC Address
*/
public void add(final String siteName, final String ipPrefix, final String switchPortId, final Long mplsLabel,
- final String nextHop) {
+ final String nextHop, final String serverMacAddress) {
Preconditions.checkNotNull(siteName);
Preconditions.checkNotNull(ipPrefix);
Preconditions.checkNotNull(switchPortId);
Map<String, String> objs = new HashMap<>();
objs.put(IP_PREFIX_PROPERTY, ipPrefix);
objs.put(SWITCH_PORT_ID_PROPERTY, switchPortId);
+ objs.put(SERVER_MAC_ADDRESS, serverMacAddress);
if (mplsLabel != null)
objs.put(MPLS_LABEL_PROPERTY, String.valueOf(mplsLabel));
private static final Logger LOG = LoggerFactory.getLogger(VpnintentProvider.class);
public static final InstanceIdentifier<MplsLabels> LABELS_IID = IidFactory.getMplsLabelsIid();
public static final InstanceIdentifier<Vpns> VPN_IID = IidFactory.getVpnsIid();
- public static final InstanceIdentifier<VpnIntents> VPN_INTENT_IID = IidFactory.getVpnIntentIid();
- public static final InstanceIdentifier<Endpoint> ENDPOINT_IID = IidFactory.getEndpointIid();
private DataBroker dataBroker;
private IntentMappingService intentMappingService;
public Future<RpcResult<Void>> addVpnEndpoint(AddVpnEndpointInput input) {
Endpoint currentEndpoint = new EndpointBuilder().setIpPrefix(input.getIpPrefix())
.setSiteName(input.getSiteName()).setSwitchPortId(input.getSwitchPortId())
+ .setNextHopMac(input.getNextHopMac())
.setKey(new EndpointKey(input.getSiteName())).build();
VpnIntents vpn = getVpn(input.getVpnName());
String failOverType = null;
Long mplsLabel = mplsManager.getUniqueLabel(currentEndpoint);
// Add info into Mapping Service
+ String macAddress = currentEndpoint.getNextHopMac() != null ?
+ currentEndpoint.getNextHopMac().getValue() : null;
MappingServiceManager msManager = new MappingServiceManager(intentMappingService);
msManager.add(currentEndpoint.getSiteName(), extractIP(currentEndpoint.getIpPrefix()),
- currentEndpoint.getSwitchPortId(), mplsLabel, null);
+ currentEndpoint.getSwitchPortId(), mplsLabel, null, macAddress);
if (vpn.getEndpoint() != null && vpn.getEndpoint().size() > 0) {
IntentServiceManager intentManager = new IntentServiceManager(dataBroker);
}
/**
- * @param IpPrefix
+ * @param ipPrefix
* object
* @return String representation of IP prefix
*/
String switchPortId = "openflow:1:3";
long mplsLabel = 10L;
String nextHop = "16.101.233.1/8";
+ String serverMacAddress = "10:40:f3:a8:86:11";
Map<String, String> map = new HashMap<>();
map.put("ip_prefix", ipPrefix);
map.put("switch_port", switchPortId);
map.put("mpls_label", String.valueOf(mplsLabel));
map.put("next_hop", nextHop);
+ map.put("server_mac_address", serverMacAddress);
IntentMappingService mapSvc = mock(IntentMappingService.class);
when(mapSvc.get(any(String.class))).thenReturn(map);
MappingServiceManager manager = new MappingServiceManager(mapSvc);
// Act
- manager.add(siteName, ipPrefix, switchPortId, mplsLabel, nextHop);
+ manager.add(siteName, ipPrefix, switchPortId, mplsLabel, nextHop, serverMacAddress);
Map<String, String> returnedObjs = manager.get(siteName);
String siteName = "UoR";
String ipPrefix = "16.101.233.2/8";
String switchPortId = "openflow:1:3";
+ String serverMacAddress = "10:40:f3:a8:86:11";
Map<String, String> map = new HashMap<>();
map.put("ip_prefix", ipPrefix);
map.put("switch_port", switchPortId);
+ map.put("server_mac_address", serverMacAddress);
IntentMappingService mapSvc = mock(IntentMappingService.class);
MappingServiceManager manager = new MappingServiceManager(mapSvc);
// Add first to delete next
- manager.add(siteName, ipPrefix, switchPortId, null, null);
+ manager.add(siteName, ipPrefix, switchPortId, null, null, serverMacAddress);
// Act
boolean result = manager.delete(siteName);