blob: d391082a103746f2919995dce118094b5364b4ca [file] [log] [blame]
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -07001package net.onrc.onos.apps.segmentrouting.web;
2
Srikanth Vavilapalli42150812014-10-20 16:53:30 -07003import java.io.IOException;
4import java.util.ArrayList;
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -07005import java.util.HashMap;
6import java.util.Iterator;
Srikanth Vavilapalli42150812014-10-20 16:53:30 -07007import java.util.List;
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -07008import java.util.Map;
Srikanth Vavilapalli42150812014-10-20 16:53:30 -07009
10import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -070011import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
12import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelRouteInfo;
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070013
14import org.codehaus.jackson.map.ObjectMapper;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070015import org.restlet.resource.Delete;
16import org.restlet.resource.Get;
17import org.restlet.resource.Post;
18import org.restlet.resource.ServerResource;
19import org.slf4j.Logger;
20import org.slf4j.LoggerFactory;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070021/**
22 * Base class for return router statistics
23 *
24 */
25public class SegmentRouterTunnelResource extends ServerResource {
26 protected final static Logger log =
27 LoggerFactory.getLogger(SegmentRouterTunnelResource.class);
28
29 @Post("json")
30 public String createTunnel(String tunnelParams) {
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070031 ISegmentRoutingService segmentRoutingService =
32 (ISegmentRoutingService) getContext().getAttributes().
33 get(ISegmentRoutingService.class.getCanonicalName());
34 ObjectMapper mapper = new ObjectMapper();
Srikanth Vavilapallie7dabdd2014-10-20 21:54:39 -070035 SegmentRouterTunnelRESTParams createParams = null;
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070036 try {
37 if (tunnelParams != null) {
Srikanth Vavilapallie7dabdd2014-10-20 21:54:39 -070038 createParams = mapper.readValue(tunnelParams,
39 SegmentRouterTunnelRESTParams.class);
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070040 }
41 } catch (IOException ex) {
42 log.error("Exception occurred parsing inbound JSON", ex);
43 return "fail";
44 }
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -070045 log.debug("createTunnel with tunnelId {} Label Path{}",
46 createParams.getTunnel_id(), createParams.getLabel_path());
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070047 boolean result = segmentRoutingService.createTunnel(createParams.getTunnel_id(),
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -070048 createParams.getLabel_path());
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070049 return (result == true) ? "success" : "fail";
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070050 }
51
52 @Delete("json")
Srikanth Vavilapallie7dabdd2014-10-20 21:54:39 -070053 public String deleteTunnel(String tunnelParams) {
54 ISegmentRoutingService segmentRoutingService =
55 (ISegmentRoutingService) getContext().getAttributes().
56 get(ISegmentRoutingService.class.getCanonicalName());
57 ObjectMapper mapper = new ObjectMapper();
58 SegmentRouterTunnelRESTParams createParams = null;
59 try {
60 if (tunnelParams != null) {
61 createParams = mapper.readValue(tunnelParams,
62 SegmentRouterTunnelRESTParams.class);
63 }
64 } catch (IOException ex) {
65 log.error("Exception occurred parsing inbound JSON", ex);
66 return "fail";
67 }
68 log.debug("deleteTunnel with Id {}", createParams.getTunnel_id());
69 boolean result = segmentRoutingService.removeTunnel(
70 createParams.getTunnel_id());
71 return (result == true) ? "deleted" : "fail";
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070072 }
73
74 @Get("json")
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070075 public Object getTunnel() {
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070076 ISegmentRoutingService segmentRoutingService =
77 (ISegmentRoutingService) getContext().getAttributes().
78 get(ISegmentRoutingService.class.getCanonicalName());
79 Iterator<TunnelInfo> ttI = segmentRoutingService.getTunnelTable().iterator();
80 List<SegmentRouterTunnelInfo> infoList = new ArrayList<SegmentRouterTunnelInfo>();
81 while(ttI.hasNext()){
82 TunnelInfo tunnelInfo = ttI.next();
83 Iterator<TunnelRouteInfo>trI = tunnelInfo.getRoutes().iterator();
84 List<List<String>> labelStack = new ArrayList<List<String>>();
Fahad Naeem Khan95aa4012014-10-21 14:07:00 -070085 List<String> dpidGroup = new ArrayList<String>();
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070086 while(trI.hasNext()){
87 TunnelRouteInfo label = trI.next();
88 labelStack.add(label.getRoute());
Fahad Naeem Khan95aa4012014-10-21 14:07:00 -070089 Integer gId = segmentRoutingService.getTunnelGroupId(tunnelInfo.getTunnelId(),
90 label.getSrcSwDpid());
91 dpidGroup.add(label.getSrcSwDpid() + "/"+ gId);
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070092 }
93 SegmentRouterTunnelInfo info = new SegmentRouterTunnelInfo(tunnelInfo.getTunnelId(),
Fahad Naeem Khan95aa4012014-10-21 14:07:00 -070094 labelStack, dpidGroup);
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070095 infoList.add(info);
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070096 }
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070097 log.debug("getTunnel with params");
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070098 return infoList;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070099 }
100}