use of org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription in project trellis-control by opennetworkinglab.
the class SegmentRoutingManager method addPseudowiresBulk.
@Override
@Deprecated
public L2TunnelHandler.Result addPseudowiresBulk(List<DefaultL2TunnelDescription> bulkPseudowires) {
// get both added and pending pseudowires
List<L2TunnelDescription> pseudowires = new ArrayList<>();
pseudowires.addAll(l2TunnelHandler.getL2Descriptions(false));
pseudowires.addAll(l2TunnelHandler.getL2Descriptions(true));
pseudowires.addAll(bulkPseudowires);
Set<L2TunnelDescription> newPseudowires = new HashSet(bulkPseudowires);
L2TunnelHandler.Result retRes = L2TunnelHandler.Result.SUCCESS;
L2TunnelHandler.Result res;
for (DefaultL2TunnelDescription pw : bulkPseudowires) {
res = addPseudowire(pw);
if (res != L2TunnelHandler.Result.SUCCESS) {
log.error("Pseudowire with id {} can not be instantiated !", res);
retRes = res;
}
}
return retRes;
}
use of org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription in project trellis-control by opennetworkinglab.
the class PseudowireAddCommand method doExecute.
@Override
protected void doExecute() {
SegmentRoutingService srService = AbstractShellCommand.get(SegmentRoutingService.class);
L2Tunnel tun;
L2TunnelPolicy policy;
try {
tun = new DefaultL2Tunnel(parseMode(mode), parseVlan(sDTag), parsePwId(pwId), parsePWLabel(pwLabel));
} catch (IllegalArgumentException e) {
log.error("Exception while parsing L2Tunnel : \n\t %s", e.getMessage());
print("Exception while parsing L2Tunnel : \n\t %s", e.getMessage());
return;
}
try {
policy = new DefaultL2TunnelPolicy(parsePwId(pwId), ConnectPoint.deviceConnectPoint(cP1), parseVlan(cP1InnerVlan), parseVlan(cP1OuterVlan), ConnectPoint.deviceConnectPoint(cP2), parseVlan(cP2InnerVlan), parseVlan(cP2OuterVlan));
} catch (IllegalArgumentException e) {
log.error("Exception while parsing L2TunnelPolicy : \n\t %s", e.getMessage());
print("Exception while parsing L2TunnelPolicy : \n\t %s", e.getMessage());
return;
}
L2TunnelDescription pw = new DefaultL2TunnelDescription(tun, policy);
L2TunnelHandler.Result res = srService.addPseudowire(pw);
log.info("Deploying pseudowire {} via the command line.", pw);
switch(res) {
case WRONG_PARAMETERS:
print("Pseudowire could not be added , error in the parameters : \n\t%s", res.getSpecificError());
break;
case CONFIGURATION_ERROR:
print("Pseudowire could not be added, configuration error : \n\t%s", res.getSpecificError());
break;
case PATH_NOT_FOUND:
print("Pseudowire path not found : \n\t%s", res.getSpecificError());
break;
case INTERNAL_ERROR:
print("Pseudowire could not be added, internal error : \n\t%s", res.getSpecificError());
break;
case SUCCESS:
break;
default:
break;
}
}
use of org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription in project trellis-control by opennetworkinglab.
the class PseudowireWebResource method createPseudowiresBulk.
/**
* Create a bulk of pseudowires.
*
* @param input JSON stream for pseudowires to create
* @return Response with appropriate status
* @throws IOException Throws IO exception.
* @onos.rsModel PseudowireCreateBulk
*/
@POST
@Path("/bulk")
@Consumes(MediaType.APPLICATION_JSON)
public Response createPseudowiresBulk(InputStream input) throws IOException {
ObjectMapper mapper = new ObjectMapper();
ObjectNode pseudowireJson = readTreeFromStream(mapper, input);
SegmentRoutingService srService = get(SegmentRoutingService.class);
Pair<List<Pair<JsonNode, String>>, List<L2TunnelDescription>> pseudowires;
try {
ArrayNode pseudowiresArray = nullIsIllegal((ArrayNode) pseudowireJson.get(PWS), PWS_KEY_ERROR);
// get two lists, first one contains pseudowires that we were unable to decode
// that have faulty arguments, second one contains pseudowires that we decoded
// succesfully
pseudowires = PSEUDOWIRE_CODEC.decodePws(pseudowiresArray, this);
} catch (ItemNotFoundException e) {
return Response.serverError().status(Response.Status.BAD_REQUEST).build();
}
log.debug("Creating pseudowires {} from rest api!", pseudowires);
List<Pair<DefaultL2TunnelDescription, String>> failed = new ArrayList<>();
for (L2TunnelDescription pw : pseudowires.getRight()) {
L2TunnelHandler.Result res = srService.addPseudowire(pw);
if (res != L2TunnelHandler.Result.SUCCESS) {
log.error("Could not create pseudowire {} : {}", pw.l2Tunnel().tunnelId(), res.getSpecificError());
failed.add(Pair.of((DefaultL2TunnelDescription) pw, res.getSpecificError()));
}
}
List<Pair<JsonNode, String>> undecodedPws = pseudowires.getLeft();
if ((failed.size() == 0) && (undecodedPws.size() == 0)) {
// all pseudowires were decoded and instantiated succesfully
return Response.ok().build();
} else {
PseudowireCodec pwCodec = new PseudowireCodec();
// some failed, need to report them to user
ObjectNode result = pwCodec.encodeFailedPseudowires(failed, undecodedPws, this);
return Response.serverError().entity(result).build();
}
}
use of org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription in project trellis-control by opennetworkinglab.
the class PseudowireWebResource method createPseudowire.
/**
* Create a new pseudowire.
*
* @param input JSON stream for pseudowire to create
* @return Response with appropriate status
* @throws IOException Throws IO exception.
* @onos.rsModel PseudowireCreate
*/
@POST
@Consumes(MediaType.APPLICATION_JSON)
public Response createPseudowire(InputStream input) throws IOException {
ObjectMapper mapper = new ObjectMapper();
ObjectNode pseudowireJson = readTreeFromStream(mapper, input);
SegmentRoutingService srService = get(SegmentRoutingService.class);
List<Pair<DefaultL2TunnelDescription, String>> failed = new ArrayList<>();
List<Pair<JsonNode, String>> undecoded = new ArrayList<>();
DefaultL2TunnelDescription pseudowire;
try {
pseudowire = PSEUDOWIRE_CODEC.decode(pseudowireJson, this);
// pseudowire decoded, try to instantiate it, if we fail add it to failed list
long tunId = pseudowire.l2Tunnel().tunnelId();
log.debug("Creating pseudowire {} from rest api!", tunId);
L2TunnelHandler.Result res = srService.addPseudowire(pseudowire);
if (res != L2TunnelHandler.Result.SUCCESS) {
log.error("Could not create pseudowire {} : {}", pseudowire.l2Tunnel().tunnelId(), res.getSpecificError());
failed.add(Pair.of(pseudowire, res.getSpecificError()));
}
} catch (IllegalArgumentException e) {
log.debug("Pseudowire could not be decoded : {}", e.getMessage());
undecoded.add(Pair.of(pseudowireJson, e.getMessage()));
}
if ((failed.size() == 0) && (undecoded.size() == 0)) {
// pseudowire instantiated correctly
return Response.ok().build();
} else {
// failed to decode or instantiate pseudowire, return the reason
PseudowireCodec pwCodec = new PseudowireCodec();
ObjectNode result = pwCodec.encodeFailedPseudowires(failed, undecoded, this);
return Response.serverError().entity(result).build();
}
}
use of org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription in project trellis-control by opennetworkinglab.
the class PseudowireWebResource method getPseudowire.
/**
* Get all pseudowires.
* Returns an array of pseudowires.
*
* @return status of OK
*/
@GET
@Produces(MediaType.APPLICATION_JSON)
public Response getPseudowire() {
SegmentRoutingService srService = get(SegmentRoutingService.class);
log.debug("Fetching pseudowires form rest api!");
List<L2TunnelPolicy> policies = srService.getL2Policies();
List<L2Tunnel> tunnels = srService.getL2Tunnels();
List<DefaultL2TunnelDescription> pseudowires = tunnels.stream().map(l2Tunnel -> {
L2TunnelPolicy policy = null;
for (L2TunnelPolicy l2Policy : policies) {
if (l2Policy.tunnelId() == l2Tunnel.tunnelId()) {
policy = l2Policy;
break;
}
}
// return a copy
return new DefaultL2TunnelDescription(l2Tunnel, policy);
}).collect(Collectors.toList());
ObjectNode result = new ObjectMapper().createObjectNode();
result.set("pseudowires", new PseudowireCodec().encode(pseudowires, this));
return ok(result.toString()).build();
}
Aggregations