3 import static java.lang.String.format;
4 import static java.util.Base64.getEncoder;
23 import com.fasterxml.jackson.core.type.TypeReference;
24 import com.fasterxml.jackson.databind.ObjectMapper;
25 import org.glassfish.jersey.client.ClientConfig;
27 import java.io.IOException;
28 import java.util.List;
29 import javax.ws.rs.client.Client;
30 import javax.ws.rs.client.ClientBuilder;
31 import javax.ws.rs.client.Entity;
32 import javax.ws.rs.client.WebTarget;
33 import javax.ws.rs.core.GenericType;
34 import javax.ws.rs.core.HttpHeaders;
35 import javax.ws.rs.core.MediaType;
36 import javax.ws.rs.core.Response;
40 private static final String auth = topologyUsername +
":" + topologyPassword;
41 private static final String authHeaderValue =
"Basic " + getEncoder().encodeToString(auth.getBytes());
53 System.out.println(
"\n==> Knockout switch");
55 Client client = ClientBuilder.newClient(
new ClientConfig());
57 .target(trafficEndpoint)
58 .path(
"/knockoutswitch")
59 .queryParam(
"switch", switchName)
61 .post(Entity.json(
""));
63 System.out.println(
format(
"===> Response = %s",
result.toString()));
64 return result.getStatus() == 200;
74 System.out.println(
"\n==> Revive switch");
76 Client client = ClientBuilder.newClient(
new ClientConfig());
78 .target(trafficEndpoint)
79 .path(
"/reviveswitch")
80 .queryParam(
"switch", switchName)
81 .queryParam(
"controller",
"tcp:kilda:6653")
83 .post(Entity.json(
""));
85 System.out.println(
format(
"===> Response = %s",
result.toString()));
86 return result.getStatus() == 200;
96 System.out.println(
"\n==> Topology-Engine Dump Switches");
98 Client client = ClientBuilder.newClient(
new ClientConfig());
100 Response response = client
101 .target(northboundEndpoint)
102 .path(
"/api/v1/switches")
103 .request(MediaType.APPLICATION_JSON)
104 .header(HttpHeaders.AUTHORIZATION, authHeaderValue)
108 System.out.println(
format(
"===> Response = %s", response.toString()));
111 List<SwitchDto> switches =
new ObjectMapper().readValue(
112 response.readEntity(String.class),
new TypeReference<List<SwitchDto>>() {
118 }
catch (IOException ex) {
120 format(
"Unable to parse the switches '%s'.", response.toString()), ex);
131 public static boolean addSwitch(String switchName, String dpid) {
132 System.out.println(
"\n==> Adding link");
134 Client client = ClientBuilder.newClient(
new ClientConfig());
136 .target(mininetEndpoint)
138 .request(MediaType.APPLICATION_JSON)
140 format(
"{\"switches\":[{\"name\": \"%s\", \"dpid\": \"%s\"}]}",
143 return result.getStatus() == 200;
162 Integer inPort, Integer inVlan, Integer outPort) {
163 System.out.println(
"\n==> Northbound Delete Switch Rules");
165 Client client = ClientBuilder.newClient(
new ClientConfig());
167 WebTarget requestBuilder = client
168 .target(northboundEndpoint)
169 .path(
"/api/v1/switches/")
172 .resolveTemplate(
"switch-id", switchId);
174 if (deleteAction != null) {
175 requestBuilder = requestBuilder.queryParam(
"delete-action", deleteAction);
177 if (inPort != null) {
178 requestBuilder = requestBuilder.queryParam(
"in-port", inPort);
180 if (inVlan != null) {
181 requestBuilder = requestBuilder.queryParam(
"in-vlan", inVlan);
183 if (outPort != null) {
184 requestBuilder = requestBuilder.queryParam(
"out-port", outPort);
187 Response response = requestBuilder
188 .request(MediaType.APPLICATION_JSON)
189 .header(HttpHeaders.AUTHORIZATION, authHeaderValue)
194 System.out.println(
format(
"===> Response = %s", response.toString()));
196 int responseCode = response.getStatus();
197 if (responseCode == 200) {
198 List<Long> cookies = response.readEntity(
new GenericType<List<Long>>() {
200 System.out.println(
format(
"====> Northbound Delete Switch Rules = %d", cookies.size()));
203 System.out.println(
format(
"====> Error: Northbound Delete Switch Rules = %s",
213 System.out.println(
"\n==> Northbound Dump Switch Rules");
215 Client client = ClientBuilder.newClient(
new ClientConfig());
217 Response response = client
218 .target(northboundEndpoint)
219 .path(
"/api/v1/switches/{switch-id}/rules")
220 .resolveTemplate(
"switch-id", switchId)
222 .request(MediaType.APPLICATION_JSON)
223 .header(HttpHeaders.AUTHORIZATION, authHeaderValue)
227 System.out.println(
format(
"===> Response = %s", response.toString()));
229 int responseCode = response.getStatus();
230 if (responseCode == 200) {
232 System.out.println(
format(
"====> Northbound Dump Switch Rules = %s", rules.getFlowEntries()));
233 return rules.getFlowEntries();
235 System.out.println(
format(
"====> Error: Northbound Dump Switch Rules = %s",
245 System.out.println(
"\n==> Northbound Validate Switch Rules");
247 Client client = ClientBuilder.newClient(
new ClientConfig());
249 Response response = client
250 .target(northboundEndpoint)
251 .path(
"/api/v1/switches/{switch-id}/rules/validate")
252 .resolveTemplate(
"switch-id", switchId)
254 .request(MediaType.APPLICATION_JSON)
255 .header(HttpHeaders.AUTHORIZATION, authHeaderValue)
259 System.out.println(
format(
"===> Response = %s", response.toString()));
261 int responseCode = response.getStatus();
262 if (responseCode == 200) {
264 System.out.println(
format(
"====> Northbound Validate Switch Rules = %s", rules));
267 System.out.println(
format(
"====> Error: Northbound Validate Switch Rules = %s",
277 System.out.println(
"\n==> Northbound Synchronize Switch Rules");
279 Client client = ClientBuilder.newClient(
new ClientConfig());
281 Response response = client
282 .target(northboundEndpoint)
283 .path(
"/api/v1/switches/{switch-id}/rules/synchronize")
284 .resolveTemplate(
"switch-id", switchId)
286 .request(MediaType.APPLICATION_JSON)
287 .header(HttpHeaders.AUTHORIZATION, authHeaderValue)
291 System.out.println(
format(
"===> Response = %s", response.toString()));
293 int responseCode = response.getStatus();
294 if (responseCode == 200) {
296 System.out.println(
format(
"====> Northbound Synchronize Switch Rules = %s", rules));
299 System.out.println(
format(
"====> Error: Northbound Synchronize Switch Rules = %s",
309 System.out.println(
"\n==> Change port state");
311 Client client = ClientBuilder.newClient(
new ClientConfig());
312 Response
result = client.target(northboundEndpoint)
313 .path(
"/api/v1/switches/{switch-id}/port/{port-no}/config")
314 .resolveTemplate(
"switch-id", switchName)
315 .resolveTemplate(
"port-no",
port)
316 .request(MediaType.APPLICATION_JSON)
317 .header(HttpHeaders.AUTHORIZATION, authHeaderValue)
319 .put(Entity.json(
format(
"{\"status\": \"%s\"}",
status)));
321 System.out.println(
format(
"===> Response = %s",
result.toString()));
323 int responseCode =
result.getStatus();
324 if (responseCode == 200) {
326 System.out.println(
format(
"====> Success" +
" = %s", portDto));
static List< SwitchDto > dumpSwitches()
static List< Long > deleteSwitchRules(String switchId, Integer inPort, Integer inVlan)
static final String topologyUsername
static final String mininetEndpoint
static boolean reviveSwitch(String switchName)
static List< FlowEntry > dumpSwitchRules(String switchId)
static final String trafficEndpoint
static List< Long > deleteSwitchRules(String switchId, DeleteRulesAction deleteAction)
static final String CORRELATION_ID
static PortDto changeSwitchPortStatus(String switchName, int port, PortStatus status)
static boolean addSwitch(String switchName, String dpid)
static List< Long > deleteSwitchRules(String switchId, Integer outPort)
static final String EXTRA_AUTH
static RulesSyncResult synchronizeSwitchRules(String switchId)
static List< Long > deleteSwitchRules(String switchId, DeleteRulesAction deleteAction, Integer inPort, Integer inVlan, Integer outPort)
static final String topologyPassword
static boolean knockoutSwitch(String switchName)
static final String northboundEndpoint
static RulesValidationResult validateSwitchRules(String switchId)