blob: 3c19a21b0da1d6ac3bb328e1184e4bed92441284 [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;
5import java.util.List;
6
7import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
8import net.onrc.onos.core.util.Dpid;
9
10import org.codehaus.jackson.map.ObjectMapper;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070011import org.restlet.resource.Delete;
12import org.restlet.resource.Get;
13import org.restlet.resource.Post;
14import org.restlet.resource.ServerResource;
15import org.slf4j.Logger;
16import org.slf4j.LoggerFactory;
17
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070018import java.util.ArrayList;
19import java.util.HashMap;
20import java.util.Iterator;
21import java.util.List;
22import java.util.Map;
23
24import net.onrc.onos.apps.segmentrouting.ISegmentRoutingService;
25import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager;
26import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelInfo;
27import net.onrc.onos.apps.segmentrouting.SegmentRoutingManager.TunnelRouteInfo;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070028/**
29 * Base class for return router statistics
30 *
31 */
32public class SegmentRouterTunnelResource extends ServerResource {
33 protected final static Logger log =
34 LoggerFactory.getLogger(SegmentRouterTunnelResource.class);
35
36 @Post("json")
37 public String createTunnel(String tunnelParams) {
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070038 ISegmentRoutingService segmentRoutingService =
39 (ISegmentRoutingService) getContext().getAttributes().
40 get(ISegmentRoutingService.class.getCanonicalName());
41 ObjectMapper mapper = new ObjectMapper();
Srikanth Vavilapallie7dabdd2014-10-20 21:54:39 -070042 SegmentRouterTunnelRESTParams createParams = null;
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070043 try {
44 if (tunnelParams != null) {
Srikanth Vavilapallie7dabdd2014-10-20 21:54:39 -070045 createParams = mapper.readValue(tunnelParams,
46 SegmentRouterTunnelRESTParams.class);
Srikanth Vavilapalli42150812014-10-20 16:53:30 -070047 }
48 } catch (IOException ex) {
49 log.error("Exception occurred parsing inbound JSON", ex);
50 return "fail";
51 }
52 log.debug("createTunnel with tunnelId {} tunnelPath{}",
53 createParams.getTunnel_id(), createParams.getTunnel_path());
54 List<Dpid> tunnelDpids = new ArrayList<Dpid>();
55 for (String dpid : createParams.getTunnel_path()) {
56 tunnelDpids.add(new Dpid(dpid));
57 }
58 boolean result = segmentRoutingService.createTunnel(createParams.getTunnel_id(),
59 tunnelDpids);
60 return (result == true) ? "success" : "fail";
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070061 }
62
63 @Delete("json")
Srikanth Vavilapallie7dabdd2014-10-20 21:54:39 -070064 public String deleteTunnel(String tunnelParams) {
65 ISegmentRoutingService segmentRoutingService =
66 (ISegmentRoutingService) getContext().getAttributes().
67 get(ISegmentRoutingService.class.getCanonicalName());
68 ObjectMapper mapper = new ObjectMapper();
69 SegmentRouterTunnelRESTParams createParams = null;
70 try {
71 if (tunnelParams != null) {
72 createParams = mapper.readValue(tunnelParams,
73 SegmentRouterTunnelRESTParams.class);
74 }
75 } catch (IOException ex) {
76 log.error("Exception occurred parsing inbound JSON", ex);
77 return "fail";
78 }
79 log.debug("deleteTunnel with Id {}", createParams.getTunnel_id());
80 boolean result = segmentRoutingService.removeTunnel(
81 createParams.getTunnel_id());
82 return (result == true) ? "deleted" : "fail";
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070083 }
84
85 @Get("json")
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070086 public Object getTunnel() {
87 System.out.println("Got into getTunnel");
88 ISegmentRoutingService segmentRoutingService =
89 (ISegmentRoutingService) getContext().getAttributes().
90 get(ISegmentRoutingService.class.getCanonicalName());
91 Iterator<TunnelInfo> ttI = segmentRoutingService.getTunnelTable().iterator();
92 List<SegmentRouterTunnelInfo> infoList = new ArrayList<SegmentRouterTunnelInfo>();
93 while(ttI.hasNext()){
94 TunnelInfo tunnelInfo = ttI.next();
95 Iterator<TunnelRouteInfo>trI = tunnelInfo.getRoutes().iterator();
96 List<List<String>> labelStack = new ArrayList<List<String>>();
97 while(trI.hasNext()){
98 TunnelRouteInfo label = trI.next();
99 labelStack.add(label.getRoute());
100 }
101 SegmentRouterTunnelInfo info = new SegmentRouterTunnelInfo(tunnelInfo.getTunnelId(),
102 tunnelInfo.getDpids(), labelStack );
103 infoList.add(info);
104 //TODO Add Group/DPID
105
106 }
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -0700107 log.debug("getTunnel with params");
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -0700108 Map <String,List<SegmentRouterTunnelInfo>>result = new HashMap<String,List<SegmentRouterTunnelInfo>>();
109 result.put("tunnels", infoList);
110 return infoList;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -0700111 }
112}