blob: 3d5da10b5ea23b3ff270fc9be1b3d737a2ef804d [file] [log] [blame]
HIGUCHI Yutaf05c4802013-06-17 11:15:50 -07001package net.onrc.onos.ofcontroller.core.internal;
Pankaj Berde5024ec12013-01-31 17:07:29 -08002
Pankaj Berde15193092013-03-21 17:30:14 -07003import java.util.ArrayList;
Pankaj Berde5024ec12013-01-31 17:07:29 -08004import java.util.List;
5
Pankaj Berde5024ec12013-01-31 17:07:29 -08006import net.floodlightcontroller.routing.Link;
yoshi2db7ff42013-11-25 19:30:25 -08007import net.onrc.onos.graph.DBOperation;
HIGUCHI Yuta20514902013-06-12 11:24:16 -07008import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
9import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoLinkService;
Pankaj Berde15193092013-03-21 17:30:14 -070010
Naoki Shiota991093a2013-12-10 14:47:18 -080011import org.openflow.util.HexString;
Pankaj Berde15193092013-03-21 17:30:14 -070012import org.slf4j.Logger;
13import org.slf4j.LoggerFactory;
14
15import com.tinkerpop.blueprints.Vertex;
16import com.tinkerpop.gremlin.java.GremlinPipeline;
yoshi2db7ff42013-11-25 19:30:25 -080017import net.onrc.onos.graph.GraphDBManager;
Naoki Shiota991093a2013-12-10 14:47:18 -080018import com.tinkerpop.pipes.PipeFunction;
19import com.tinkerpop.pipes.transform.PathPipe;
Pankaj Berde5024ec12013-01-31 17:07:29 -080020
21public class TopoLinkServiceImpl implements ITopoLinkService {
22
yoshi2db7ff42013-11-25 19:30:25 -080023 protected DBOperation dbop;
Yuta HIGUCHI6ac8d182013-10-22 15:24:56 -070024 protected final static Logger log = LoggerFactory.getLogger(TopoLinkServiceImpl.class);
Pankaj Berde15193092013-03-21 17:30:14 -070025
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080026 @Override
27 protected void finalize() {
Pankaj Berde15193092013-03-21 17:30:14 -070028 close();
29 }
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080030
Pankaj Berde15193092013-03-21 17:30:14 -070031 @Override
32 public void close() {
yoshi2db7ff42013-11-25 19:30:25 -080033 dbop.close();
Pankaj Berde15193092013-03-21 17:30:14 -070034 }
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080035
Pankaj Berde5024ec12013-01-31 17:07:29 -080036 @Override
Pankaj Berde1cde50b2013-02-19 20:16:06 -080037 public List<Link> getActiveLinks() {
yoshie929d0d2014-01-13 13:15:07 -080038<<<<<<< HEAD
Pankaj Berde5024ec12013-01-31 17:07:29 -080039 // TODO Auto-generated method stub
yoshid38cd312013-12-02 19:54:44 -080040 dbop = GraphDBManager.getDBOperation("ramcloud", "/tmp/ramcloudconf");
41 //dbop = GraphDBManager.getDBOperation("", "");
yoshi9535fc82013-12-05 11:34:52 -080042 //dbop.commit(); //Commit to ensure we see latest data
yoshi2db7ff42013-11-25 19:30:25 -080043 Iterable<ISwitchObject> switches = dbop.getActiveSwitches();
Pankaj Berde15193092013-03-21 17:30:14 -070044 List<Link> links = new ArrayList<Link>();
yoshie929d0d2014-01-13 13:15:07 -080045=======
Pankaj Berde5024ec12013-01-31 17:07:29 -080046 op = new GraphDBOperation("");
Pankaj Berde15193092013-03-21 17:30:14 -070047 op.commit(); //Commit to ensure we see latest data
48 Iterable<ISwitchObject> switches = op.getActiveSwitches();
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080049 List<Link> links = new ArrayList<Link>();
yoshie929d0d2014-01-13 13:15:07 -080050>>>>>>> df6f52e87c8beeec9a50e4050634d70f124e9bc3
Pankaj Berde15193092013-03-21 17:30:14 -070051 for (ISwitchObject sw : switches) {
52 GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
53 ExtractLink extractor = new ExtractLink();
54
55 pipe.start(sw.asVertex());
56 pipe.enablePath(true);
57 pipe.out("on").out("link").in("on").path().step(extractor);
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080058
Pankaj Berde15193092013-03-21 17:30:14 -070059 while (pipe.hasNext() ) {
60 Link l = pipe.next();
61 links.add(l);
62 }
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080063
Pankaj Berde15193092013-03-21 17:30:14 -070064 }
yoshi2db7ff42013-11-25 19:30:25 -080065 dbop.commit();
Pankaj Berde15193092013-03-21 17:30:14 -070066 return links;
Pankaj Berde5024ec12013-01-31 17:07:29 -080067 }
68
69 @Override
Pankaj Berde1cde50b2013-02-19 20:16:06 -080070 public List<Link> getLinksOnSwitch(String dpid) {
yoshie929d0d2014-01-13 13:15:07 -080071<<<<<<< HEAD
Pankaj Berde15193092013-03-21 17:30:14 -070072 List<Link> links = new ArrayList<Link>();
yoshi2db7ff42013-11-25 19:30:25 -080073 ISwitchObject sw = dbop.searchSwitch(dpid);
yoshie929d0d2014-01-13 13:15:07 -080074=======
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080075 List<Link> links = new ArrayList<Link>();
Toshio Koide22f192c2013-06-13 14:01:45 -070076 ISwitchObject sw = op.searchSwitch(dpid);
yoshie929d0d2014-01-13 13:15:07 -080077>>>>>>> df6f52e87c8beeec9a50e4050634d70f124e9bc3
Pankaj Berde15193092013-03-21 17:30:14 -070078 GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
79 ExtractLink extractor = new ExtractLink();
80
81 pipe.start(sw.asVertex());
82 pipe.enablePath(true);
83 pipe.out("on").out("link").in("on").path().step(extractor);
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -080084
Pankaj Berde15193092013-03-21 17:30:14 -070085 while (pipe.hasNext() ) {
86 Link l = pipe.next();
87 links.add(l);
88 }
89 return links;
90
Pankaj Berde5024ec12013-01-31 17:07:29 -080091 }
Naoki Shiota991093a2013-12-10 14:47:18 -080092
93 private class ExtractLink implements PipeFunction<PathPipe<Vertex>, Link> {
94 @Override
95 public Link compute(PathPipe<Vertex> pipe) {
96 long s_dpid = 0;
97 long d_dpid = 0;
98 short s_port = 0;
99 short d_port = 0;
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -0800100
Naoki Shiotade5d8422013-12-11 13:56:57 -0800101 List<?> V = pipe.next();
102 Vertex src_sw = (Vertex)V.get(0);
103 Vertex dest_sw = (Vertex)V.get(3);
104 Vertex src_port = (Vertex)V.get(1);
105 Vertex dest_port = (Vertex)V.get(2);
Naoki Shiota991093a2013-12-10 14:47:18 -0800106 s_dpid = HexString.toLong((String) src_sw.getProperty("dpid"));
107 d_dpid = HexString.toLong((String) dest_sw.getProperty("dpid"));
108 s_port = (Short) src_port.getProperty("number");
109 d_port = (Short) dest_port.getProperty("number");
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -0800110
Naoki Shiota991093a2013-12-10 14:47:18 -0800111 Link l = new Link(s_dpid,s_port,d_dpid,d_port);
Yuta HIGUCHI67a7a3e2014-01-03 14:51:34 -0800112
Naoki Shiota991093a2013-12-10 14:47:18 -0800113 return l;
114 }
115 }
Pankaj Berde5024ec12013-01-31 17:07:29 -0800116}