blob: 15bddea7858ad5bacb7e4106b374d1a09ccae28b [file] [log] [blame]
Thomas Vachuska781d18b2014-10-27 10:31:25 -07001/*
Ray Milkey34c95902015-04-15 09:47:53 -07002 * Copyright 2014-2015 Open Networking Laboratory
Thomas Vachuska781d18b2014-10-27 10:31:25 -07003 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07004 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
Thomas Vachuska781d18b2014-10-27 10:31:25 -07007 *
Thomas Vachuska4f1a60c2014-10-28 13:39:07 -07008 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
Thomas Vachuska781d18b2014-10-27 10:31:25 -070015 */
Brian O'Connorabafb502014-12-02 22:26:20 -080016package org.onosproject.sdnip;
Jonathan Hartce430a42014-10-16 20:44:29 -070017
Jonathan Harte30fcda2015-08-06 16:22:34 -070018import com.google.common.collect.Sets;
Jonathan Hartce430a42014-10-16 20:44:29 -070019import org.junit.Before;
Jonathan Hartce430a42014-10-16 20:44:29 -070020import org.junit.Test;
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -080021import org.onlab.junit.TestUtils.TestUtilsException;
Jonathan Hart51372182014-12-03 21:32:34 -080022import org.onlab.packet.Ethernet;
23import org.onlab.packet.IPv4;
24import org.onlab.packet.IpAddress;
25import org.onlab.packet.IpPrefix;
26import org.onlab.packet.MacAddress;
Hyunsun Mooncf732fb2015-08-22 21:04:23 -070027import org.onlab.packet.TpPort;
Jonathan Hart6cd2f352015-01-13 17:44:45 -080028import org.onlab.packet.VlanId;
Jonathan Hart9a426f82015-09-03 15:43:13 +020029import org.onosproject.TestApplicationId;
Brian O'Connorabafb502014-12-02 22:26:20 -080030import org.onosproject.core.ApplicationId;
Jonathan Hart4cb39882015-08-12 23:50:55 -040031import org.onosproject.incubator.net.intf.Interface;
Jonathan Hartb14221c2016-03-07 09:55:50 -080032import org.onosproject.incubator.net.intf.InterfaceListener;
Jonathan Hart4cb39882015-08-12 23:50:55 -040033import org.onosproject.incubator.net.intf.InterfaceService;
Brian O'Connorabafb502014-12-02 22:26:20 -080034import org.onosproject.net.ConnectPoint;
35import org.onosproject.net.DeviceId;
36import org.onosproject.net.PortNumber;
Jonathan Hart08105be2015-10-10 18:31:06 -070037import org.onosproject.net.config.NetworkConfigListener;
Jonathan Hart9a426f82015-09-03 15:43:13 +020038import org.onosproject.net.config.NetworkConfigService;
Brian O'Connorabafb502014-12-02 22:26:20 -080039import org.onosproject.net.flow.DefaultTrafficSelector;
40import org.onosproject.net.flow.DefaultTrafficTreatment;
41import org.onosproject.net.flow.TrafficSelector;
42import org.onosproject.net.flow.TrafficTreatment;
43import org.onosproject.net.host.InterfaceIpAddress;
44import org.onosproject.net.intent.AbstractIntentTest;
45import org.onosproject.net.intent.Intent;
Jonathan Hart9a426f82015-09-03 15:43:13 +020046import org.onosproject.net.intent.Key;
Brian O'Connorabafb502014-12-02 22:26:20 -080047import org.onosproject.net.intent.PointToPointIntent;
Jonathan Hart9a426f82015-09-03 15:43:13 +020048import org.onosproject.routing.IntentSynchronizationService;
Jonathan Hart4cb39882015-08-12 23:50:55 -040049import org.onosproject.routing.config.BgpConfig;
Jonathan Hart2da1e602015-02-18 19:09:24 -080050import org.onosproject.routing.config.BgpPeer;
Jonathan Hartce430a42014-10-16 20:44:29 -070051
Jonathan Harte30fcda2015-08-06 16:22:34 -070052import java.util.ArrayList;
53import java.util.Collections;
54import java.util.HashMap;
Jonathan Harte30fcda2015-08-06 16:22:34 -070055import java.util.List;
56import java.util.Map;
Jonathan Harta8625482015-09-08 16:14:56 -070057import java.util.Optional;
Jonathan Hart4cb39882015-08-12 23:50:55 -040058import java.util.Set;
Jonathan Hart552e31f2015-02-06 11:11:59 -080059
Jonathan Hart08105be2015-10-10 18:31:06 -070060import static org.easymock.EasyMock.anyObject;
Ray Milkey3e3ec5f2015-03-17 17:00:38 -070061import static org.easymock.EasyMock.createMock;
62import static org.easymock.EasyMock.expect;
Jonathan Hart08105be2015-10-10 18:31:06 -070063import static org.easymock.EasyMock.expectLastCall;
Ray Milkey3e3ec5f2015-03-17 17:00:38 -070064import static org.easymock.EasyMock.replay;
65import static org.easymock.EasyMock.reset;
66import static org.easymock.EasyMock.verify;
Jonathan Hart33b81f22016-02-05 09:25:50 -080067import static org.onosproject.routing.TestIntentServiceHelper.eqExceptId;
Jonathan Hartce430a42014-10-16 20:44:29 -070068
69/**
Jonathan Hart51372182014-12-03 21:32:34 -080070 * Unit tests for PeerConnectivityManager.
Jonathan Hartce430a42014-10-16 20:44:29 -070071 */
Brian O'Connor520c0522014-11-23 23:50:47 -080072public class PeerConnectivityManagerTest extends AbstractIntentTest {
Jonathan Hartce430a42014-10-16 20:44:29 -070073
Jonathan Hart9a426f82015-09-03 15:43:13 +020074 private static final ApplicationId APPID = TestApplicationId.create("foo");
Thomas Vachuskab97cf282014-10-20 23:31:12 -070075
Jonathan Hart4cb39882015-08-12 23:50:55 -040076 private static final ApplicationId CONFIG_APP_ID = APPID;
77
Jonathan Hartce430a42014-10-16 20:44:29 -070078 private PeerConnectivityManager peerConnectivityManager;
Jonathan Hart9a426f82015-09-03 15:43:13 +020079 private IntentSynchronizationService intentSynchronizer;
Jonathan Hart4cb39882015-08-12 23:50:55 -040080 private InterfaceService interfaceService;
81 private NetworkConfigService networkConfigService;
Jonathan Hartce430a42014-10-16 20:44:29 -070082
Jonathan Hart4cb39882015-08-12 23:50:55 -040083 private Set<BgpConfig.BgpSpeakerConfig> bgpSpeakers;
Jonathan Hartce430a42014-10-16 20:44:29 -070084 private Map<String, Interface> interfaces;
85 private Map<IpAddress, BgpPeer> peers;
86
Jonathan Hart4cb39882015-08-12 23:50:55 -040087 private BgpConfig bgpConfig;
88
Jonathan Hartce430a42014-10-16 20:44:29 -070089 private List<PointToPointIntent> intentList;
90
91 private final String dpid1 = "00:00:00:00:00:00:00:01";
92 private final String dpid2 = "00:00:00:00:00:00:00:02";
Luca Prete8f2a3ce2016-03-29 16:13:01 -070093 private final String dpid3 = "00:00:00:00:00:00:00:03";
Jonathan Hartce430a42014-10-16 20:44:29 -070094
95 private final DeviceId deviceId1 =
96 DeviceId.deviceId(SdnIp.dpidToUri(dpid1));
97 private final DeviceId deviceId2 =
98 DeviceId.deviceId(SdnIp.dpidToUri(dpid2));
Luca Prete8f2a3ce2016-03-29 16:13:01 -070099 private final DeviceId deviceId3 =
100 DeviceId.deviceId(SdnIp.dpidToUri(dpid3));
Jonathan Hartce430a42014-10-16 20:44:29 -0700101
102 // Interfaces connected to BGP speakers
103 private final ConnectPoint s1Eth100 =
104 new ConnectPoint(deviceId1, PortNumber.portNumber(100));
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700105 private final ConnectPoint s2Eth100 =
106 new ConnectPoint(deviceId2, PortNumber.portNumber(100));
107 private final ConnectPoint s3Eth100 =
108 new ConnectPoint(deviceId3, PortNumber.portNumber(100));
Jonathan Hartce430a42014-10-16 20:44:29 -0700109
110 // Interfaces connected to BGP peers
111 private final ConnectPoint s1Eth1 =
112 new ConnectPoint(deviceId1, PortNumber.portNumber(1));
113 private final ConnectPoint s2Eth1 =
114 new ConnectPoint(deviceId2, PortNumber.portNumber(1));
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700115 private final ConnectPoint s3Eth1 =
116 new ConnectPoint(deviceId3, PortNumber.portNumber(1));
Jonathan Hartce430a42014-10-16 20:44:29 -0700117
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700118 private static final VlanId NO_VLAN = VlanId.NONE;
119 private static final VlanId VLAN10 = VlanId.vlanId(Short.valueOf("10"));
120 private static final VlanId VLAN20 = VlanId.vlanId(Short.valueOf("20"));
121 private static final VlanId VLAN30 = VlanId.vlanId(Short.valueOf("30"));
Jonathan Hartce430a42014-10-16 20:44:29 -0700122
123 @Before
124 public void setUp() throws Exception {
Brian O'Connor520c0522014-11-23 23:50:47 -0800125 super.setUp();
Jonathan Hartb14221c2016-03-07 09:55:50 -0800126
Jonathan Hart4cb39882015-08-12 23:50:55 -0400127 interfaceService = createMock(InterfaceService.class);
Jonathan Hartb14221c2016-03-07 09:55:50 -0800128 interfaceService.addListener(anyObject(InterfaceListener.class));
129 expectLastCall().anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400130 networkConfigService = createMock(NetworkConfigService.class);
Jonathan Hart08105be2015-10-10 18:31:06 -0700131 networkConfigService.addListener(anyObject(NetworkConfigListener.class));
132 expectLastCall().anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400133 bgpConfig = createMock(BgpConfig.class);
Jonathan Hart90a02c22015-02-13 11:52:07 -0800134
Jonathan Hart4cb39882015-08-12 23:50:55 -0400135 // These will set expectations on routingConfig and interfaceService
136 bgpSpeakers = setUpBgpSpeakers();
Jonathan Hartce430a42014-10-16 20:44:29 -0700137 interfaces = Collections.unmodifiableMap(setUpInterfaces());
Jonathan Hart9a426f82015-09-03 15:43:13 +0200138 peers = setUpPeers();
Jonathan Hartce430a42014-10-16 20:44:29 -0700139
140 initPeerConnectivity();
141 intentList = setUpIntentList();
142 }
143
144 /**
145 * Sets up BGP speakers.
146 *
147 * @return configured BGP speakers as a map from speaker name to speaker
148 */
Jonathan Hart4cb39882015-08-12 23:50:55 -0400149 private Set<BgpConfig.BgpSpeakerConfig> setUpBgpSpeakers() {
Jonathan Hartce430a42014-10-16 20:44:29 -0700150
Jonathan Hart4cb39882015-08-12 23:50:55 -0400151 BgpConfig.BgpSpeakerConfig speaker1 = new BgpConfig.BgpSpeakerConfig(
Jonathan Harta8625482015-09-08 16:14:56 -0700152 Optional.empty(),
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700153 NO_VLAN, s1Eth100,
154 Collections.singleton(IpAddress.valueOf("192.168.10.1")));
Jonathan Hartce430a42014-10-16 20:44:29 -0700155
Jonathan Hart4cb39882015-08-12 23:50:55 -0400156 BgpConfig.BgpSpeakerConfig speaker2 = new BgpConfig.BgpSpeakerConfig(
Jonathan Harta8625482015-09-08 16:14:56 -0700157 Optional.empty(),
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700158 NO_VLAN, s1Eth100,
159 Sets.newHashSet(IpAddress.valueOf("192.168.20.1"),
Jonathan Hart4cb39882015-08-12 23:50:55 -0400160 IpAddress.valueOf("192.168.30.1")));
Jonathan Hartce430a42014-10-16 20:44:29 -0700161
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700162 BgpConfig.BgpSpeakerConfig speaker3 = new BgpConfig.BgpSpeakerConfig(
163 Optional.empty(),
164 VLAN30, s3Eth100,
165 Sets.newHashSet(IpAddress.valueOf("192.168.40.1"),
166 IpAddress.valueOf("192.168.50.1")));
167
Jonathan Hart4cb39882015-08-12 23:50:55 -0400168 Set<BgpConfig.BgpSpeakerConfig> bgpSpeakers = Sets.newHashSet();
169 bgpSpeakers.add(speaker1);
170 bgpSpeakers.add(speaker2);
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700171 bgpSpeakers.add(speaker3);
Jonathan Hartce430a42014-10-16 20:44:29 -0700172
Jonathan Hart4cb39882015-08-12 23:50:55 -0400173 return bgpSpeakers;
Jonathan Hartce430a42014-10-16 20:44:29 -0700174 }
175
176 /**
177 * Sets up logical interfaces, which emulate the configured interfaces
178 * in SDN-IP application.
179 *
Jonathan Hart9a426f82015-09-03 15:43:13 +0200180 * @return configured interfaces as a map from interface name to Interface
Jonathan Hartce430a42014-10-16 20:44:29 -0700181 */
182 private Map<String, Interface> setUpInterfaces() {
183
Jonathan Hart9a426f82015-09-03 15:43:13 +0200184 Map<String, Interface> configuredInterfaces = new HashMap<>();
Jonathan Hartce430a42014-10-16 20:44:29 -0700185
186 String interfaceSw1Eth1 = "s1-eth1";
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700187 InterfaceIpAddress ia1 =
Jonathan Harte30fcda2015-08-06 16:22:34 -0700188 new InterfaceIpAddress(IpAddress.valueOf("192.168.10.101"),
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700189 IpPrefix.valueOf("192.168.10.0/24"));
Jonathan Hartb14221c2016-03-07 09:55:50 -0800190 Interface intfsw1eth1 = new Interface(interfaceSw1Eth1, s1Eth1,
Jonathan Hart00cddda2016-02-16 10:30:37 -0800191 Collections.singletonList(ia1),
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800192 MacAddress.valueOf("00:00:00:00:00:01"),
193 VlanId.NONE);
Jonathan Hartce430a42014-10-16 20:44:29 -0700194
195 configuredInterfaces.put(interfaceSw1Eth1, intfsw1eth1);
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700196
Jonathan Hartce430a42014-10-16 20:44:29 -0700197 String interfaceSw2Eth1 = "s2-eth1";
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700198 InterfaceIpAddress ia2 =
Jonathan Harte30fcda2015-08-06 16:22:34 -0700199 new InterfaceIpAddress(IpAddress.valueOf("192.168.20.101"),
Pavlin Radoslavov76b0ae22014-10-27 15:33:19 -0700200 IpPrefix.valueOf("192.168.20.0/24"));
Jonathan Hartb14221c2016-03-07 09:55:50 -0800201 Interface intfsw2eth1 = new Interface(interfaceSw2Eth1, s2Eth1,
Jonathan Hart00cddda2016-02-16 10:30:37 -0800202 Collections.singletonList(ia2),
Jonathan Hart6cd2f352015-01-13 17:44:45 -0800203 MacAddress.valueOf("00:00:00:00:00:02"),
204 VlanId.NONE);
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700205
Jonathan Hartce430a42014-10-16 20:44:29 -0700206 configuredInterfaces.put(interfaceSw2Eth1, intfsw2eth1);
207
Jonathan Harte30fcda2015-08-06 16:22:34 -0700208 String interfaceSw2Eth1intf2 = "s2-eth1_2";
209 InterfaceIpAddress ia3 =
210 new InterfaceIpAddress(IpAddress.valueOf("192.168.30.101"),
211 IpPrefix.valueOf("192.168.30.0/24"));
Jonathan Hartb14221c2016-03-07 09:55:50 -0800212 Interface intfsw2eth1intf2 = new Interface(interfaceSw2Eth1intf2, s2Eth1,
Jonathan Hart00cddda2016-02-16 10:30:37 -0800213 Collections.singletonList(ia3),
Jonathan Harte30fcda2015-08-06 16:22:34 -0700214 MacAddress.valueOf("00:00:00:00:00:03"),
215 VlanId.NONE);
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700216
Jonathan Harte30fcda2015-08-06 16:22:34 -0700217 configuredInterfaces.put(interfaceSw2Eth1intf2, intfsw2eth1intf2);
218
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700219 String interfaceSw3Eth1 = "s3-eth1";
220 InterfaceIpAddress ia4 =
221 new InterfaceIpAddress(IpAddress.valueOf("192.168.40.101"),
222 IpPrefix.valueOf("192.168.40.0/24"));
223 Interface intfsw3eth1 = new Interface(s3Eth1,
224 Collections.singleton(ia4),
225 MacAddress.valueOf("00:00:00:00:00:04"),
226 VLAN10);
227
228 configuredInterfaces.put(interfaceSw3Eth1, intfsw3eth1);
229
230 String interfaceSw3Eth1intf2 = "s3-eth1_2";
231 InterfaceIpAddress ia5 =
232 new InterfaceIpAddress(IpAddress.valueOf("192.168.50.101"),
233 IpPrefix.valueOf("192.168.50.0/24"));
234 Interface intfsw3eth1intf2 = new Interface(s3Eth1,
235 Collections.singleton(ia5),
236 MacAddress.valueOf("00:00:00:00:00:05"),
237 VLAN20);
238
239 configuredInterfaces.put(interfaceSw3Eth1intf2, intfsw3eth1intf2);
240
Jonathan Hart4cb39882015-08-12 23:50:55 -0400241 expect(interfaceService.getInterfacesByPort(s1Eth1))
242 .andReturn(Collections.singleton(intfsw1eth1)).anyTimes();
243 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.10.101")))
244 .andReturn(Collections.singleton(intfsw1eth1)).anyTimes();
245 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.10.1")))
Jonathan Hartce430a42014-10-16 20:44:29 -0700246 .andReturn(intfsw1eth1).anyTimes();
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700247
Jonathan Hart4cb39882015-08-12 23:50:55 -0400248 expect(interfaceService.getInterfacesByPort(s2Eth1))
249 .andReturn(Collections.singleton(intfsw2eth1)).anyTimes();
250 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.20.101")))
251 .andReturn(Collections.singleton(intfsw2eth1)).anyTimes();
252 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.20.1")))
Jonathan Hartce430a42014-10-16 20:44:29 -0700253 .andReturn(intfsw2eth1).anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400254
255 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.30.101")))
256 .andReturn(Collections.singleton(intfsw2eth1intf2)).anyTimes();
257 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.30.1")))
Jonathan Harte30fcda2015-08-06 16:22:34 -0700258 .andReturn(intfsw2eth1intf2).anyTimes();
Jonathan Hartce430a42014-10-16 20:44:29 -0700259
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700260 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.40.101")))
261 .andReturn(Collections.singleton(intfsw3eth1)).anyTimes();
262 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.40.1")))
263 .andReturn(intfsw3eth1).anyTimes();
264
265 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.50.101")))
266 .andReturn(Collections.singleton(intfsw3eth1intf2)).anyTimes();
267 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.50.1")))
268 .andReturn(intfsw3eth1intf2).anyTimes();
269
Jonathan Hartce430a42014-10-16 20:44:29 -0700270 // Non-existent interface used during one of the tests
Jonathan Hart4cb39882015-08-12 23:50:55 -0400271 expect(interfaceService.getInterfacesByPort(new ConnectPoint(
272 DeviceId.deviceId(SdnIp.dpidToUri("00:00:00:00:00:00:01:00")),
273 PortNumber.portNumber(1))))
Jonathan Hartce430a42014-10-16 20:44:29 -0700274 .andReturn(null).anyTimes();
275
Jonathan Hart4cb39882015-08-12 23:50:55 -0400276 expect(interfaceService.getInterfaces()).andReturn(
Jonathan Hartce430a42014-10-16 20:44:29 -0700277 Sets.newHashSet(configuredInterfaces.values())).anyTimes();
Jonathan Hartce430a42014-10-16 20:44:29 -0700278
279 return configuredInterfaces;
280 }
281
282 /**
283 * Sets up BGP daemon peers.
284 *
285 * @return configured BGP peers as a MAP from peer IP address to BgpPeer
286 */
287 private Map<IpAddress, BgpPeer> setUpPeers() {
288
Jonathan Hart9a426f82015-09-03 15:43:13 +0200289 Map<IpAddress, BgpPeer> configuredPeers = new HashMap<>();
Jonathan Hartce430a42014-10-16 20:44:29 -0700290
291 String peerSw1Eth1 = "192.168.10.1";
292 configuredPeers.put(IpAddress.valueOf(peerSw1Eth1),
293 new BgpPeer(dpid1, 1, peerSw1Eth1));
294
295 // Two BGP peers are connected to switch 2 port 1.
296 String peer1Sw2Eth1 = "192.168.20.1";
297 configuredPeers.put(IpAddress.valueOf(peer1Sw2Eth1),
298 new BgpPeer(dpid2, 1, peer1Sw2Eth1));
299
Jonathan Harte30fcda2015-08-06 16:22:34 -0700300 String peer2Sw2Eth1 = "192.168.30.1";
Jonathan Hartce430a42014-10-16 20:44:29 -0700301 configuredPeers.put(IpAddress.valueOf(peer2Sw2Eth1),
302 new BgpPeer(dpid2, 1, peer2Sw2Eth1));
303
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700304 String peer3Sw3Eth1 = "192.168.40.1";
305 configuredPeers.put(IpAddress.valueOf(peer3Sw3Eth1),
306 new BgpPeer(dpid3, 1, peer3Sw3Eth1));
307
308 String peer4Sw3Eth1 = "192.168.50.1";
309 configuredPeers.put(IpAddress.valueOf(peer4Sw3Eth1),
310 new BgpPeer(dpid3, 1, peer4Sw3Eth1));
311
Jonathan Hartce430a42014-10-16 20:44:29 -0700312 return configuredPeers;
313 }
314
315 /**
316 * Sets up expected point to point intent list.
317 *
318 * @return point to point intent list
319 */
320 private List<PointToPointIntent> setUpIntentList() {
Jonathan Hart90a02c22015-02-13 11:52:07 -0800321 intentList = new ArrayList<>();
Jonathan Hartce430a42014-10-16 20:44:29 -0700322
323 setUpBgpIntents();
324 setUpIcmpIntents();
325
326 return intentList;
Jonathan Hartce430a42014-10-16 20:44:29 -0700327 }
328
329 /**
330 * Constructs a BGP intent and put it into the intentList.
331 * <p/>
332 * The purpose of this method is too simplify the setUpBgpIntents() method,
333 * and to make the setUpBgpIntents() easy to read.
334 *
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700335 * @param srcVlanId ingress VlanId
336 * @param dstVlanId egress VlanId
Jonathan Hartce430a42014-10-16 20:44:29 -0700337 * @param srcPrefix source IP prefix to match
338 * @param dstPrefix destination IP prefix to match
339 * @param srcTcpPort source TCP port to match
340 * @param dstTcpPort destination TCP port to match
341 * @param srcConnectPoint source connect point for PointToPointIntent
342 * @param dstConnectPoint destination connect point for PointToPointIntent
343 */
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700344 private void bgpPathintentConstructor(VlanId srcVlanId, VlanId dstVlanId,
345 String srcPrefix, String dstPrefix,
346 Short srcTcpPort, Short dstTcpPort,
347 ConnectPoint srcConnectPoint,
348 ConnectPoint dstConnectPoint) {
Jonathan Hartce430a42014-10-16 20:44:29 -0700349
350 TrafficSelector.Builder builder = DefaultTrafficSelector.builder()
351 .matchEthType(Ethernet.TYPE_IPV4)
352 .matchIPProtocol(IPv4.PROTOCOL_TCP)
353 .matchIPSrc(IpPrefix.valueOf(srcPrefix))
354 .matchIPDst(IpPrefix.valueOf(dstPrefix));
355
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700356 if (!srcVlanId.equals(VlanId.NONE)) {
357 builder.matchVlanId(VlanId.ANY);
358 }
359
360 TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
361
362 if (!dstVlanId.equals(VlanId.NONE)) {
363 treatment.setVlanId(dstVlanId);
364 }
365
Jonathan Hartce430a42014-10-16 20:44:29 -0700366 if (srcTcpPort != null) {
Hyunsun Mooncf732fb2015-08-22 21:04:23 -0700367 builder.matchTcpSrc(TpPort.tpPort(srcTcpPort));
Jonathan Hartce430a42014-10-16 20:44:29 -0700368 }
369 if (dstTcpPort != null) {
Hyunsun Mooncf732fb2015-08-22 21:04:23 -0700370 builder.matchTcpDst(TpPort.tpPort(dstTcpPort));
Jonathan Hartce430a42014-10-16 20:44:29 -0700371 }
372
Jonathan Hart9a426f82015-09-03 15:43:13 +0200373 Key key = Key.of(srcPrefix.split("/")[0] + "-" + dstPrefix.split("/")[0]
374 + "-" + ((srcTcpPort == null) ? "dst" : "src"), APPID);
375
Ray Milkey3e3ec5f2015-03-17 17:00:38 -0700376 PointToPointIntent intent = PointToPointIntent.builder()
377 .appId(APPID)
Jonathan Hart9a426f82015-09-03 15:43:13 +0200378 .key(key)
Ray Milkey3e3ec5f2015-03-17 17:00:38 -0700379 .selector(builder.build())
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700380 .treatment(treatment.build())
Ray Milkey3e3ec5f2015-03-17 17:00:38 -0700381 .ingressPoint(srcConnectPoint)
382 .egressPoint(dstConnectPoint)
383 .build();
Jonathan Hartce430a42014-10-16 20:44:29 -0700384
385 intentList.add(intent);
386 }
387
388 /**
389 * Sets up intents for BGP paths.
390 */
391 private void setUpBgpIntents() {
392
Jonathan Hart41349e92015-02-09 14:14:02 -0800393 Short bgpPort = 179;
Jonathan Hartce430a42014-10-16 20:44:29 -0700394
395 // Start to build intents between BGP speaker1 and BGP peer1
396 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700397 NO_VLAN, NO_VLAN,
398 "192.168.10.101/32", "192.168.10.1/32",
399 null, bgpPort,
Jonathan Hartce430a42014-10-16 20:44:29 -0700400 s1Eth100, s1Eth1);
401 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700402 NO_VLAN, NO_VLAN,
403 "192.168.10.101/32", "192.168.10.1/32",
404 bgpPort, null,
Jonathan Hartce430a42014-10-16 20:44:29 -0700405 s1Eth100, s1Eth1);
406
407 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700408 NO_VLAN, NO_VLAN,
409 "192.168.10.1/32", "192.168.10.101/32",
410 null, bgpPort,
Jonathan Hartce430a42014-10-16 20:44:29 -0700411 s1Eth1, s1Eth100);
412 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700413 NO_VLAN, NO_VLAN,
414 "192.168.10.1/32", "192.168.10.101/32",
415 bgpPort, null,
Jonathan Hartce430a42014-10-16 20:44:29 -0700416 s1Eth1, s1Eth100);
417
418 // Start to build intents between BGP speaker1 and BGP peer2
419 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700420 NO_VLAN, NO_VLAN,
421 "192.168.20.101/32", "192.168.20.1/32",
422 null, bgpPort,
Jonathan Hartce430a42014-10-16 20:44:29 -0700423 s1Eth100, s2Eth1);
424 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700425 NO_VLAN, NO_VLAN,
426 "192.168.20.101/32", "192.168.20.1/32",
427 bgpPort, null,
Jonathan Hartce430a42014-10-16 20:44:29 -0700428 s1Eth100, s2Eth1);
429
430 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700431 NO_VLAN, NO_VLAN,
432 "192.168.20.1/32", "192.168.20.101/32",
433 null, bgpPort,
Jonathan Hartce430a42014-10-16 20:44:29 -0700434 s2Eth1, s1Eth100);
435 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700436 NO_VLAN, NO_VLAN,
437 "192.168.20.1/32", "192.168.20.101/32",
438 bgpPort, null,
Jonathan Hartce430a42014-10-16 20:44:29 -0700439 s2Eth1, s1Eth100);
440
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700441 // Start to build intents between BGP speaker2 and BGP peer1
Jonathan Hartce430a42014-10-16 20:44:29 -0700442 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700443 NO_VLAN, NO_VLAN,
444 "192.168.30.101/32", "192.168.30.1/32",
445 null, bgpPort,
Jonathan Harte30fcda2015-08-06 16:22:34 -0700446 s1Eth100, s2Eth1);
Jonathan Hartce430a42014-10-16 20:44:29 -0700447 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700448 NO_VLAN, NO_VLAN,
449 "192.168.30.101/32", "192.168.30.1/32",
450 bgpPort, null,
Jonathan Harte30fcda2015-08-06 16:22:34 -0700451 s1Eth100, s2Eth1);
Jonathan Hartce430a42014-10-16 20:44:29 -0700452
453 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700454 NO_VLAN, NO_VLAN,
455 "192.168.30.1/32", "192.168.30.101/32",
456 null, bgpPort,
Jonathan Harte30fcda2015-08-06 16:22:34 -0700457 s2Eth1, s1Eth100);
Jonathan Hartce430a42014-10-16 20:44:29 -0700458 bgpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700459 NO_VLAN, NO_VLAN,
460 "192.168.30.1/32", "192.168.30.101/32",
461 bgpPort, null,
Jonathan Harte30fcda2015-08-06 16:22:34 -0700462 s2Eth1, s1Eth100);
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700463
464 // Start to build intents between BGP speaker3 and BGP peer4
465 bgpPathintentConstructor(
466 VLAN30, VLAN10,
467 "192.168.40.101/32", "192.168.40.1/32",
468 null, bgpPort,
469 s3Eth100, s3Eth1);
470 bgpPathintentConstructor(
471 VLAN30, VLAN10,
472 "192.168.40.101/32", "192.168.40.1/32",
473 bgpPort, null,
474 s3Eth100, s3Eth1);
475
476 bgpPathintentConstructor(
477 VLAN10, VLAN30,
478 "192.168.40.1/32", "192.168.40.101/32",
479 null, bgpPort,
480 s3Eth1, s3Eth100);
481 bgpPathintentConstructor(
482 VLAN10, VLAN30,
483 "192.168.40.1/32", "192.168.40.101/32",
484 bgpPort, null,
485 s3Eth1, s3Eth100);
486
487 // Start to build intents between BGP speaker3 and BGP peer5
488 bgpPathintentConstructor(
489 VLAN30, VLAN20,
490 "192.168.50.101/32", "192.168.50.1/32",
491 null, bgpPort,
492 s3Eth100, s3Eth1);
493 bgpPathintentConstructor(
494 VLAN30, VLAN20,
495 "192.168.50.101/32", "192.168.50.1/32",
496 bgpPort, null,
497 s3Eth100, s3Eth1);
498
499 bgpPathintentConstructor(
500 VLAN20, VLAN30,
501 "192.168.50.1/32", "192.168.50.101/32",
502 null, bgpPort,
503 s3Eth1, s3Eth100);
504 bgpPathintentConstructor(
505 VLAN20, VLAN30,
506 "192.168.50.1/32", "192.168.50.101/32",
507 bgpPort, null,
508 s3Eth1, s3Eth100);
Jonathan Hartce430a42014-10-16 20:44:29 -0700509 }
510
511 /**
512 * Constructs a BGP intent and put it into the intentList.
513 * <p/>
514 * The purpose of this method is too simplify the setUpBgpIntents() method,
515 * and to make the setUpBgpIntents() easy to read.
516 *
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700517 * @param srcVlanId ingress VlanId
518 * @param dstVlanId egress VlanId
Jonathan Hartce430a42014-10-16 20:44:29 -0700519 * @param srcPrefix source IP prefix to match
520 * @param dstPrefix destination IP prefix to match
521 * @param srcConnectPoint source connect point for PointToPointIntent
522 * @param dstConnectPoint destination connect point for PointToPointIntent
523 */
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700524 private void icmpPathintentConstructor(VlanId srcVlanId, VlanId dstVlanId,
525 String srcPrefix, String dstPrefix,
526 ConnectPoint srcConnectPoint,
527 ConnectPoint dstConnectPoint) {
Jonathan Hartce430a42014-10-16 20:44:29 -0700528
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700529 TrafficSelector.Builder builder = DefaultTrafficSelector.builder()
Jonathan Hartce430a42014-10-16 20:44:29 -0700530 .matchEthType(Ethernet.TYPE_IPV4)
531 .matchIPProtocol(IPv4.PROTOCOL_ICMP)
532 .matchIPSrc(IpPrefix.valueOf(srcPrefix))
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700533 .matchIPDst(IpPrefix.valueOf(dstPrefix));
534
535 if (!srcVlanId.equals(VlanId.NONE)) {
536 builder.matchVlanId(VlanId.ANY);
537 }
538
539 TrafficTreatment.Builder treatment = DefaultTrafficTreatment.builder();
540
541 if (!dstVlanId.equals(VlanId.NONE)) {
542 treatment.setVlanId(dstVlanId);
543 }
Jonathan Hartce430a42014-10-16 20:44:29 -0700544
Jonathan Hart9a426f82015-09-03 15:43:13 +0200545 Key key = Key.of(srcPrefix.split("/")[0] + "-" + dstPrefix.split("/")[0]
546 + "-" + "icmp", APPID);
547
Ray Milkey3e3ec5f2015-03-17 17:00:38 -0700548 PointToPointIntent intent = PointToPointIntent.builder()
549 .appId(APPID)
Jonathan Hart9a426f82015-09-03 15:43:13 +0200550 .key(key)
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700551 .selector(builder.build())
552 .treatment(treatment.build())
Ray Milkey3e3ec5f2015-03-17 17:00:38 -0700553 .ingressPoint(srcConnectPoint)
554 .egressPoint(dstConnectPoint)
555 .build();
Jonathan Hartce430a42014-10-16 20:44:29 -0700556
557 intentList.add(intent);
558 }
559
560 /**
561 * Sets up intents for ICMP paths.
562 */
563 private void setUpIcmpIntents() {
Jonathan Hartce430a42014-10-16 20:44:29 -0700564 // Start to build intents between BGP speaker1 and BGP peer1
565 icmpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700566 NO_VLAN, NO_VLAN,
567 "192.168.10.101/32", "192.168.10.1/32",
568 s1Eth100, s1Eth1);
Jonathan Hartce430a42014-10-16 20:44:29 -0700569 icmpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700570 NO_VLAN, NO_VLAN,
571 "192.168.10.1/32", "192.168.10.101/32",
572 s1Eth1, s1Eth100);
Jonathan Hartce430a42014-10-16 20:44:29 -0700573
574 // Start to build intents between BGP speaker1 and BGP peer2
575 icmpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700576 NO_VLAN, NO_VLAN,
577 "192.168.20.101/32", "192.168.20.1/32",
578 s1Eth100, s2Eth1);
Jonathan Hartce430a42014-10-16 20:44:29 -0700579 icmpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700580 NO_VLAN, NO_VLAN,
581 "192.168.20.1/32", "192.168.20.101/32",
582 s2Eth1, s1Eth100);
Jonathan Hartce430a42014-10-16 20:44:29 -0700583
Jonathan Hartce430a42014-10-16 20:44:29 -0700584 icmpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700585 NO_VLAN, NO_VLAN,
586 "192.168.30.101/32", "192.168.30.1/32",
587 s1Eth100, s2Eth1);
Jonathan Hartce430a42014-10-16 20:44:29 -0700588 icmpPathintentConstructor(
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700589 NO_VLAN, NO_VLAN,
590 "192.168.30.1/32", "192.168.30.101/32",
591 s2Eth1, s1Eth100);
592
593 // Start to build intents between BGP speaker3 and BGP peer 4
594 icmpPathintentConstructor(
595 VLAN10, VLAN30,
596 "192.168.40.1/32", "192.168.40.101/32",
597 s3Eth1, s3Eth100);
598 icmpPathintentConstructor(
599 VLAN30, VLAN10,
600 "192.168.40.101/32", "192.168.40.1/32",
601 s3Eth100, s3Eth1);
602
603 // Start to build intents between BGP speaker3 and BGP peer 5
604 icmpPathintentConstructor(
605 VLAN20, VLAN30,
606 "192.168.50.1/32", "192.168.50.101/32",
607 s3Eth1, s3Eth100);
608 icmpPathintentConstructor(
609 VLAN30, VLAN20,
610 "192.168.50.101/32", "192.168.50.1/32",
611 s3Eth100, s3Eth1);
Jonathan Hartce430a42014-10-16 20:44:29 -0700612 }
613
614 /**
615 * Initializes peer connectivity testing environment.
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800616 *
617 * @throws TestUtilsException if exceptions when using TestUtils
Jonathan Hartce430a42014-10-16 20:44:29 -0700618 */
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800619 private void initPeerConnectivity() throws TestUtilsException {
Jonathan Hart4cb39882015-08-12 23:50:55 -0400620 expect(bgpConfig.bgpSpeakers()).andReturn(bgpSpeakers).anyTimes();
621 replay(bgpConfig);
Jonathan Hart9a426f82015-09-03 15:43:13 +0200622 expect(networkConfigService.getConfig(APPID, BgpConfig.class))
623 .andReturn(bgpConfig).anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400624 replay(networkConfigService);
Jonathan Hart4cb39882015-08-12 23:50:55 -0400625 replay(interfaceService);
Jonathan Hartce430a42014-10-16 20:44:29 -0700626
Jonathan Hart9a426f82015-09-03 15:43:13 +0200627 intentSynchronizer = createMock(IntentSynchronizationService.class);
628 replay(intentSynchronizer);
Pavlin Radoslavova7243cc2014-11-22 21:38:02 -0800629
630 peerConnectivityManager =
631 new PeerConnectivityManager(APPID, intentSynchronizer,
Jonathan Hart4cb39882015-08-12 23:50:55 -0400632 networkConfigService,
633 CONFIG_APP_ID,
634 interfaceService);
Jonathan Hartce430a42014-10-16 20:44:29 -0700635 }
636
Jonathan Hartce430a42014-10-16 20:44:29 -0700637 /**
638 * Tests whether peer connectivity manager can set up correct BGP and
639 * ICMP intents according to specific configuration.
640 * <p/>
641 * Two tricky cases included in the configuration are: 2 peers on a same
642 * switch port, peer on the same switch with BGPd.
643 */
644 @Test
645 public void testConnectionSetup() {
Jonathan Hart9a426f82015-09-03 15:43:13 +0200646 reset(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700647
Pavlin Radoslavovdde22ae2014-11-24 11:47:17 -0800648 // Setup the expected intents
Pavlin Radoslavovdde22ae2014-11-24 11:47:17 -0800649 for (Intent intent : intentList) {
Jonathan Hart9a426f82015-09-03 15:43:13 +0200650 intentSynchronizer.submit(eqExceptId(intent));
Jonathan Hartce430a42014-10-16 20:44:29 -0700651 }
Jonathan Hart9a426f82015-09-03 15:43:13 +0200652 replay(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700653
654 // Running the interface to be tested.
655 peerConnectivityManager.start();
656
Jonathan Hart9a426f82015-09-03 15:43:13 +0200657 verify(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700658 }
659
660 /**
661 * Tests a corner case, when there are no interfaces in the configuration.
662 */
663 @Test
664 public void testNullInterfaces() {
Jonathan Hart4cb39882015-08-12 23:50:55 -0400665 reset(interfaceService);
Jonathan Hartb14221c2016-03-07 09:55:50 -0800666 interfaceService.addListener(anyObject(InterfaceListener.class));
667 expectLastCall().anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400668
669 expect(interfaceService.getInterfaces()).andReturn(
Jonathan Hart9a426f82015-09-03 15:43:13 +0200670 Sets.newHashSet()).anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400671 expect(interfaceService.getInterfacesByPort(s2Eth1))
672 .andReturn(Collections.emptySet()).anyTimes();
673 expect(interfaceService.getInterfacesByPort(s1Eth1))
674 .andReturn(Collections.emptySet()).anyTimes();
675 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.10.101")))
676 .andReturn(Collections.emptySet()).anyTimes();
677 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.10.1")))
Jonathan Hartce430a42014-10-16 20:44:29 -0700678 .andReturn(null).anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400679 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.20.101")))
680 .andReturn(Collections.emptySet()).anyTimes();
681 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.20.1")))
Jonathan Harte30fcda2015-08-06 16:22:34 -0700682 .andReturn(null).anyTimes();
Jonathan Hart4cb39882015-08-12 23:50:55 -0400683 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.30.101")))
684 .andReturn(Collections.emptySet()).anyTimes();
685 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.30.1")))
Jonathan Harte30fcda2015-08-06 16:22:34 -0700686 .andReturn(null).anyTimes();
Luca Prete8f2a3ce2016-03-29 16:13:01 -0700687 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.40.101")))
688 .andReturn(Collections.emptySet()).anyTimes();
689 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.40.1")))
690 .andReturn(null).anyTimes();
691 expect(interfaceService.getInterfacesByIp(IpAddress.valueOf("192.168.50.101")))
692 .andReturn(Collections.emptySet()).anyTimes();
693 expect(interfaceService.getMatchingInterface(IpAddress.valueOf("192.168.50.1")))
694 .andReturn(null).anyTimes();
Jonathan Hartce430a42014-10-16 20:44:29 -0700695
Jonathan Hart4cb39882015-08-12 23:50:55 -0400696 replay(interfaceService);
Jonathan Hartce430a42014-10-16 20:44:29 -0700697
Jonathan Hart9a426f82015-09-03 15:43:13 +0200698 reset(intentSynchronizer);
699 replay(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700700 peerConnectivityManager.start();
Jonathan Hart9a426f82015-09-03 15:43:13 +0200701 verify(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700702 }
703
704 /**
705 * Tests a corner case, when there is no BGP speakers in the configuration.
706 */
707 @Test
708 public void testNullBgpSpeakers() {
Jonathan Hart4cb39882015-08-12 23:50:55 -0400709 reset(bgpConfig);
Jonathan Hart4cb39882015-08-12 23:50:55 -0400710 expect(bgpConfig.bgpSpeakers()).andReturn(Collections.emptySet()).anyTimes();
711 replay(bgpConfig);
Jonathan Hartce430a42014-10-16 20:44:29 -0700712
Jonathan Hart9a426f82015-09-03 15:43:13 +0200713 reset(intentSynchronizer);
714 replay(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700715 peerConnectivityManager.start();
Jonathan Hart9a426f82015-09-03 15:43:13 +0200716 verify(intentSynchronizer);
Jonathan Hartce430a42014-10-16 20:44:29 -0700717 }
718
719 /**
720 * Tests a corner case, when there is no Interface configured for one BGP
721 * peer.
722 */
723 @Test
724 public void testNoPeerInterface() {
725 String peerSw100Eth1 = "192.168.200.1";
Jonathan Hart9a426f82015-09-03 15:43:13 +0200726 peers.put(IpAddress.valueOf(peerSw100Eth1),
Jonathan Hartce430a42014-10-16 20:44:29 -0700727 new BgpPeer("00:00:00:00:00:00:01:00", 1, peerSw100Eth1));
728 testConnectionSetup();
729 }
730
Jonathan Hartce430a42014-10-16 20:44:29 -0700731}