blob: c2e8efe64cbfa85910c525a994020371164521d3 [file] [log] [blame]
HIGUCHI Yuta83889492013-06-12 13:20:48 -07001package net.onrc.onos.ofcontroller.linkdiscovery.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
HIGUCHI Yuta83889492013-06-12 13:20:48 -07006import net.floodlightcontroller.linkdiscovery.internal.LinkStorageImpl;
Pankaj Berde15193092013-03-21 17:30:14 -07007import net.floodlightcontroller.linkdiscovery.internal.LinkStorageImpl.ExtractLink;
Pankaj Berde5024ec12013-01-31 17:07:29 -08008import net.floodlightcontroller.routing.Link;
HIGUCHI Yuta20514902013-06-12 11:24:16 -07009import net.onrc.onos.ofcontroller.core.INetMapTopologyObjects.ISwitchObject;
10import net.onrc.onos.ofcontroller.core.INetMapTopologyService.ITopoLinkService;
Pankaj Berde15193092013-03-21 17:30:14 -070011import net.onrc.onos.util.GraphDBConnection;
Pankaj Berdeae5ebd22013-06-10 21:23:07 -070012import net.onrc.onos.util.GraphDBConnection.Transaction;
Pankaj Berde15193092013-03-21 17:30:14 -070013
14import org.slf4j.Logger;
15import org.slf4j.LoggerFactory;
16
17import com.tinkerpop.blueprints.Vertex;
18import com.tinkerpop.gremlin.java.GremlinPipeline;
Pankaj Berde5024ec12013-01-31 17:07:29 -080019
20public class TopoLinkServiceImpl implements ITopoLinkService {
21
Pankaj Berde15193092013-03-21 17:30:14 -070022 public GraphDBConnection conn;
23 protected static Logger log = LoggerFactory.getLogger(TopoLinkServiceImpl.class);
24
25
26 public void finalize() {
27 close();
28 }
29
30 @Override
31 public void close() {
32 conn.close();
33 }
Pankaj Berde5024ec12013-01-31 17:07:29 -080034
Pankaj Berde5024ec12013-01-31 17:07:29 -080035 @Override
Pankaj Berde1cde50b2013-02-19 20:16:06 -080036 public List<Link> getActiveLinks() {
Pankaj Berde5024ec12013-01-31 17:07:29 -080037 // TODO Auto-generated method stub
Pankaj Berde15193092013-03-21 17:30:14 -070038 conn = GraphDBConnection.getInstance("");
Jonathan Harte6e91872013-04-13 11:10:32 -070039 conn.close(); //Commit to ensure we see latest data
Pankaj Berde15193092013-03-21 17:30:14 -070040 Iterable<ISwitchObject> switches = conn.utils().getActiveSwitches(conn);
41 List<Link> links = new ArrayList<Link>();
42 for (ISwitchObject sw : switches) {
43 GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
44 ExtractLink extractor = new ExtractLink();
45
46 pipe.start(sw.asVertex());
47 pipe.enablePath(true);
48 pipe.out("on").out("link").in("on").path().step(extractor);
49
50 while (pipe.hasNext() ) {
51 Link l = pipe.next();
52 links.add(l);
53 }
54
55 }
Pankaj Berdeae5ebd22013-06-10 21:23:07 -070056 conn.endTx(Transaction.COMMIT);
Pankaj Berde15193092013-03-21 17:30:14 -070057 return links;
Pankaj Berde5024ec12013-01-31 17:07:29 -080058 }
59
60 @Override
Pankaj Berde1cde50b2013-02-19 20:16:06 -080061 public List<Link> getLinksOnSwitch(String dpid) {
Pankaj Berde5024ec12013-01-31 17:07:29 -080062 // TODO Auto-generated method stub
Pankaj Berde15193092013-03-21 17:30:14 -070063 List<Link> links = new ArrayList<Link>();
64 ISwitchObject sw = conn.utils().searchSwitch(conn, dpid);
65 GremlinPipeline<Vertex, Link> pipe = new GremlinPipeline<Vertex, Link>();
66 ExtractLink extractor = new ExtractLink();
67
68 pipe.start(sw.asVertex());
69 pipe.enablePath(true);
70 pipe.out("on").out("link").in("on").path().step(extractor);
71
72 while (pipe.hasNext() ) {
73 Link l = pipe.next();
74 links.add(l);
75 }
76 return links;
77
Pankaj Berde5024ec12013-01-31 17:07:29 -080078 }
Pankaj Berde15193092013-03-21 17:30:14 -070079
Pankaj Berde5024ec12013-01-31 17:07:29 -080080}