Search in sources :

Example 1 with DefaultL2TunnelDescription

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;
}
Also used : DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) DefaultL2TunnelHandler(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelHandler) L2TunnelHandler(org.onosproject.segmentrouting.pwaas.L2TunnelHandler) CopyOnWriteArrayList(java.util.concurrent.CopyOnWriteArrayList) ArrayList(java.util.ArrayList) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) L2TunnelDescription(org.onosproject.segmentrouting.pwaas.L2TunnelDescription) HashSet(java.util.HashSet)

Example 2 with DefaultL2TunnelDescription

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;
    }
}
Also used : SegmentRoutingService(org.onosproject.segmentrouting.SegmentRoutingService) DefaultL2Tunnel(org.onosproject.segmentrouting.pwaas.DefaultL2Tunnel) L2Tunnel(org.onosproject.segmentrouting.pwaas.L2Tunnel) DefaultL2Tunnel(org.onosproject.segmentrouting.pwaas.DefaultL2Tunnel) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) L2TunnelHandler(org.onosproject.segmentrouting.pwaas.L2TunnelHandler) DefaultL2TunnelPolicy(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelPolicy) L2TunnelPolicy(org.onosproject.segmentrouting.pwaas.L2TunnelPolicy) DefaultL2TunnelPolicy(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelPolicy) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) L2TunnelDescription(org.onosproject.segmentrouting.pwaas.L2TunnelDescription)

Example 3 with DefaultL2TunnelDescription

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();
    }
}
Also used : SegmentRoutingService(org.onosproject.segmentrouting.SegmentRoutingService) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) L2TunnelHandler(org.onosproject.segmentrouting.pwaas.L2TunnelHandler) ArrayList(java.util.ArrayList) JsonNode(com.fasterxml.jackson.databind.JsonNode) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) ArrayList(java.util.ArrayList) List(java.util.List) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) ItemNotFoundException(org.onlab.util.ItemNotFoundException) Pair(org.apache.commons.lang3.tuple.Pair) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) L2TunnelDescription(org.onosproject.segmentrouting.pwaas.L2TunnelDescription) Path(javax.ws.rs.Path) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes)

Example 4 with DefaultL2TunnelDescription

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();
    }
}
Also used : SegmentRoutingService(org.onosproject.segmentrouting.SegmentRoutingService) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) L2TunnelHandler(org.onosproject.segmentrouting.pwaas.L2TunnelHandler) ArrayList(java.util.ArrayList) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) Pair(org.apache.commons.lang3.tuple.Pair) POST(javax.ws.rs.POST) Consumes(javax.ws.rs.Consumes)

Example 5 with DefaultL2TunnelDescription

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();
}
Also used : SegmentRoutingService(org.onosproject.segmentrouting.SegmentRoutingService) AbstractWebResource(org.onosproject.rest.AbstractWebResource) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET) L2Tunnel(org.onosproject.segmentrouting.pwaas.L2Tunnel) LoggerFactory(org.slf4j.LoggerFactory) Path(javax.ws.rs.Path) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) L2TunnelDescription(org.onosproject.segmentrouting.pwaas.L2TunnelDescription) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ArrayList(java.util.ArrayList) SegmentRoutingService(org.onosproject.segmentrouting.SegmentRoutingService) L2TunnelHandler(org.onosproject.segmentrouting.pwaas.L2TunnelHandler) MediaType(javax.ws.rs.core.MediaType) Pair(org.apache.commons.lang3.tuple.Pair) Consumes(javax.ws.rs.Consumes) JsonNode(com.fasterxml.jackson.databind.JsonNode) Tools.nullIsIllegal(org.onlab.util.Tools.nullIsIllegal) DELETE(javax.ws.rs.DELETE) Logger(org.slf4j.Logger) POST(javax.ws.rs.POST) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) IOException(java.io.IOException) ItemNotFoundException(org.onlab.util.ItemNotFoundException) Collectors(java.util.stream.Collectors) ArrayNode(com.fasterxml.jackson.databind.node.ArrayNode) L2TunnelPolicy(org.onosproject.segmentrouting.pwaas.L2TunnelPolicy) List(java.util.List) Response(javax.ws.rs.core.Response) Tools.readTreeFromStream(org.onlab.util.Tools.readTreeFromStream) InputStream(java.io.InputStream) L2Tunnel(org.onosproject.segmentrouting.pwaas.L2Tunnel) DefaultL2TunnelDescription(org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription) ObjectNode(com.fasterxml.jackson.databind.node.ObjectNode) ObjectMapper(com.fasterxml.jackson.databind.ObjectMapper) L2TunnelPolicy(org.onosproject.segmentrouting.pwaas.L2TunnelPolicy) Produces(javax.ws.rs.Produces) GET(javax.ws.rs.GET)

Aggregations

DefaultL2TunnelDescription (org.onosproject.segmentrouting.pwaas.DefaultL2TunnelDescription)7 ArrayList (java.util.ArrayList)5 L2TunnelDescription (org.onosproject.segmentrouting.pwaas.L2TunnelDescription)5 L2TunnelHandler (org.onosproject.segmentrouting.pwaas.L2TunnelHandler)5 ObjectNode (com.fasterxml.jackson.databind.node.ObjectNode)4 Pair (org.apache.commons.lang3.tuple.Pair)4 SegmentRoutingService (org.onosproject.segmentrouting.SegmentRoutingService)4 JsonNode (com.fasterxml.jackson.databind.JsonNode)3 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)3 Consumes (javax.ws.rs.Consumes)3 POST (javax.ws.rs.POST)3 ArrayNode (com.fasterxml.jackson.databind.node.ArrayNode)2 List (java.util.List)2 Path (javax.ws.rs.Path)2 ItemNotFoundException (org.onlab.util.ItemNotFoundException)2 DefaultL2Tunnel (org.onosproject.segmentrouting.pwaas.DefaultL2Tunnel)2 DefaultL2TunnelPolicy (org.onosproject.segmentrouting.pwaas.DefaultL2TunnelPolicy)2 L2Tunnel (org.onosproject.segmentrouting.pwaas.L2Tunnel)2 L2TunnelPolicy (org.onosproject.segmentrouting.pwaas.L2TunnelPolicy)2 IOException (java.io.IOException)1