blob: bf3a0845d46defca56bdbc89b6e6d8a77ca45da4 [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() {
76 System.out.println("Got into getTunnel");
77 ISegmentRoutingService segmentRoutingService =
78 (ISegmentRoutingService) getContext().getAttributes().
79 get(ISegmentRoutingService.class.getCanonicalName());
80 Iterator<TunnelInfo> ttI = segmentRoutingService.getTunnelTable().iterator();
81 List<SegmentRouterTunnelInfo> infoList = new ArrayList<SegmentRouterTunnelInfo>();
82 while(ttI.hasNext()){
83 TunnelInfo tunnelInfo = ttI.next();
84 Iterator<TunnelRouteInfo>trI = tunnelInfo.getRoutes().iterator();
85 List<List<String>> labelStack = new ArrayList<List<String>>();
86 while(trI.hasNext()){
87 TunnelRouteInfo label = trI.next();
88 labelStack.add(label.getRoute());
89 }
90 SegmentRouterTunnelInfo info = new SegmentRouterTunnelInfo(tunnelInfo.getTunnelId(),
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -070091 /*tunnelInfo.getDpids(),*/labelStack);
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070092 infoList.add(info);
93 //TODO Add Group/DPID
Srikanth Vavilapalli1f6a5742014-10-21 13:45:11 -070094
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070095 }
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -070096 log.debug("getTunnel with params");
Fahad Naeem Khana40f9b62014-10-20 18:33:45 -070097 Map <String,List<SegmentRouterTunnelInfo>>result = new HashMap<String,List<SegmentRouterTunnelInfo>>();
98 result.put("tunnels", infoList);
99 return infoList;
Srikanth Vavilapallib1f168d2014-10-19 21:31:52 -0700100 }
101}