Cleaned up BgpRoute module code
diff --git a/src/main/java/net/floodlightcontroller/bgproute/BgpRoute.java b/src/main/java/net/floodlightcontroller/bgproute/BgpRoute.java
index 47f3d1a..d4ef11d 100644
--- a/src/main/java/net/floodlightcontroller/bgproute/BgpRoute.java
+++ b/src/main/java/net/floodlightcontroller/bgproute/BgpRoute.java
@@ -1,31 +1,21 @@
package net.floodlightcontroller.bgproute;
-import java.io.BufferedReader;
-import java.io.File;
-import java.io.FileReader;
-import java.io.IOException;
-import java.io.InputStreamReader;
-import java.net.HttpURLConnection;
-import java.net.MalformedURLException;
-import java.net.URL;
-import java.util.Collection;
-import java.util.Map;
+import java.net.UnknownHostException;
import java.util.ArrayList;
+import java.util.Collection;
import java.util.HashMap;
+import java.util.Map;
+import net.floodlightcontroller.core.IFloodlightProviderService;
import net.floodlightcontroller.core.module.FloodlightModuleContext;
import net.floodlightcontroller.core.module.FloodlightModuleException;
import net.floodlightcontroller.core.module.IFloodlightModule;
import net.floodlightcontroller.core.module.IFloodlightService;
-import net.floodlightcontroller.core.IFloodlightProviderService;
-
+import net.floodlightcontroller.linkdiscovery.ILinkDiscovery;
import net.floodlightcontroller.linkdiscovery.ILinkDiscovery.LDUpdate;
import net.floodlightcontroller.restserver.IRestApiService;
import net.floodlightcontroller.topology.ITopologyListener;
import net.floodlightcontroller.topology.ITopologyService;
-import net.floodlightcontroller.restclient.RestClient;
-
-import net.floodlightcontroller.linkdiscovery.ILinkDiscovery;
import net.sf.json.JSONArray;
import net.sf.json.JSONObject;
import net.sf.json.JSONSerializer;
@@ -38,33 +28,34 @@
protected static Logger log = LoggerFactory.getLogger(BgpRoute.class);
protected IFloodlightProviderService floodlightProvider;
+ protected IRestApiService restApi;
protected ITopologyService topology;
protected static Ptree ptree;
- protected static String BGPdRestIp;
- protected static String RouterId;
-
+ protected String bgpdRestIp;
+ protected String routerId;
@Override
public Collection<Class<? extends IFloodlightService>> getModuleServices() {
- Collection<Class<? extends IFloodlightService>> l = new ArrayList<Class<? extends IFloodlightService>>();
+ Collection<Class<? extends IFloodlightService>> l
+ = new ArrayList<Class<? extends IFloodlightService>>();
l.add(IBgpRouteService.class);
return l;
}
@Override
public Map<Class<? extends IFloodlightService>, IFloodlightService> getServiceImpls() {
- Map<Class<? extends IFloodlightService>, IFloodlightService> m = new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
+ Map<Class<? extends IFloodlightService>, IFloodlightService> m
+ = new HashMap<Class<? extends IFloodlightService>, IFloodlightService>();
m.put(IBgpRouteService.class, this);
return m;
}
- protected IRestApiService restApi;
-
@Override
public Collection<Class<? extends IFloodlightService>> getModuleDependencies() {
- Collection<Class<? extends IFloodlightService>> l = new ArrayList<Class<? extends IFloodlightService>>();
+ Collection<Class<? extends IFloodlightService>> l
+ = new ArrayList<Class<? extends IFloodlightService>>();
l.add(IFloodlightProviderService.class);
l.add(ITopologyService.class);
l.add(IBgpRouteService.class);
@@ -82,24 +73,43 @@
restApi = context.getServiceImpl(IRestApiService.class);
topology = context.getServiceImpl(ITopologyService.class);
+ //Read in config values
+ bgpdRestIp = context.getConfigParams(this).get("BgpdRestIp");
+ if (bgpdRestIp == null){
+ log.error("BgpdRestIp property not found in config file");
+ System.exit(1);
+ }
+ else {
+ log.info("BgpdRestIp set to {}", bgpdRestIp);
+ }
+
+ routerId = context.getConfigParams(this).get("RouterId");
+ if (routerId == null){
+ log.error("RouterId property not found in config file");
+ System.exit(1);
+ }
+ else {
+ log.info("RouterId set to {}", routerId);
+ }
// Test.
//test();
-
}
public Ptree getPtree() {
return ptree;
}
- public void clearPtree() {
- ptree = null;
- ptree = new Ptree(32);
-
+
+ public void clearPtree() {
+ //ptree = null;
+ ptree = new Ptree(32);
}
+
public String getBGPdRestIp() {
- return BGPdRestIp;
+ return bgpdRestIp;
}
+
public String getRouterId() {
- return RouterId;
+ return routerId;
}
// Return nexthop address as byte array.
@@ -114,17 +124,20 @@
log.debug("lookupRib: ptree node null");
return null;
}
+
if (node.rib == null) {
log.debug("lookupRib: ptree rib null");
return null;
}
+
ptree.delReference(node);
return node.rib;
}
+ //TODO looks like this should be a unit test
@SuppressWarnings("unused")
- private void test() {
+ private void test() throws UnknownHostException {
System.out.println("Here it is");
Prefix p = new Prefix("128.0.0.0", 8);
Prefix q = new Prefix("8.0.0.0", 8);
@@ -179,115 +192,63 @@
}
+ private void retrieveRib(){
+ String url = "http://" + bgpdRestIp + "/wm/bgp/" + routerId;
+ String response = RestClient.get(url);
+
+ if (response.equals("")){
+ return;
+ }
+
+ response = response.replaceAll("\"", "'");
+ JSONObject jsonObj = (JSONObject) JSONSerializer.toJSON(response);
+ JSONArray rib_json_array = jsonObj.getJSONArray("rib");
+ String router_id = jsonObj.getString("router-id");
+
+ int size = rib_json_array.size();
+
+ log.info("Retrived RIB of {} entries from BGPd", size);
+
+ for (int j = 0; j < size; j++) {
+ JSONObject second_json_object = rib_json_array.getJSONObject(j);
+ String prefix = second_json_object.getString("prefix");
+ String nexthop = second_json_object.getString("nexthop");
+
+ //insert each rib entry into the local rib;
+ String[] substring = prefix.split("/");
+ String prefix1 = substring[0];
+ String mask1 = substring[1];
+
+ Prefix p;
+ try {
+ p = new Prefix(prefix1, Integer.valueOf(mask1));
+ } catch (NumberFormatException e) {
+ log.warn("Wrong mask format in RIB JSON: {}", mask1);
+ continue;
+ } catch (UnknownHostException e1) {
+ log.warn("Wrong prefix format in RIB JSON: {}", prefix1);
+ continue;
+ }
+
+ PtreeNode node = ptree.acquire(p.getAddress(), p.masklen);
+ Rib rib = new Rib(router_id, nexthop, p.masklen);
+
+ if (node.rib != null) {
+ node.rib = null;
+ ptree.delReference(node);
+ }
+
+ node.rib = rib;
+ }
+ }
+
@Override
public void startUp(FloodlightModuleContext context) {
restApi.addRestletRoutable(new BgpRouteWebRoutable());
- topology.addListener((ITopologyListener) this);
+ topology.addListener(this);
- // get the BGPdRestIp and RouterId from transit-route-pusher.py
- File file = new File("/home/ubuntu/sdn/transit-route-pusher.py");
-
-
- try{
- BufferedReader input = new BufferedReader (new FileReader(file));
- String text;
- int is_BGPdRestIp=0;
- int is_RouterId=0;
-
- while((text = input.readLine()) != null && (is_BGPdRestIp == 0) || (is_RouterId == 0) ){
-
- if(is_BGPdRestIp == 1 && is_RouterId ==1)
- {break;}
-
- if(is_BGPdRestIp == 0 && text.contains("BGPdRestIp") ){
- String[] temp = text.split("\"");
- BGPdRestIp = temp[1];
- is_BGPdRestIp = 1;
-
-
- }else if (is_RouterId == 0 && text.contains("RouterId") ){
-
- String[] temp = text.split("\"");
- RouterId = temp[1];
- is_RouterId = 1;
-
-
- }
-
- }
-
-
- } catch(Exception e){
- e.printStackTrace();
- }
-
-
- // automatically get the rib from bgpd at the ONOS initiation process.
- String dest=RouterId;
- String str="http://"+BGPdRestIp+"/wm/bgp/"+dest;
-
-
- try {
-
- URL url = new URL(str);
- HttpURLConnection conn = (HttpURLConnection) url.openConnection();
- conn.setRequestMethod("GET");
- conn.setRequestProperty("Accept", "application/json");
-
- if (conn.getResponseCode() != 200) {
- throw new RuntimeException("Failed : HTTP error code : "
- + conn.getResponseCode());
- }
-
- BufferedReader br = new BufferedReader(new InputStreamReader((conn.getInputStream())));
- StringBuffer res = new StringBuffer();
- String line;
- while ((line = br.readLine()) != null) {
- res.append(line);
- }
-
- String res2=res.toString().replaceAll("\"", "'");
- JSONObject jsonObj = (JSONObject) JSONSerializer.toJSON(res2);
- JSONArray rib_json_array = jsonObj.getJSONArray("rib");
- String router_id = jsonObj.getString("router-id");
-
- int size = rib_json_array.size();
- System.out.print("size:"+size+"\n");
- for (int j = 0; j < size; j++) {
- JSONObject second_json_object = rib_json_array.getJSONObject(j);
- String prefix = second_json_object.getString("prefix");
- String nexthop = second_json_object.getString("nexthop");
-
- //insert each rib entry into the local rib;
- String[] substring= prefix.split("/");
- String prefix1=substring[0];
- String mask1=substring[1];
-
- Prefix p = new Prefix(prefix1, Integer.valueOf(mask1));
- PtreeNode node = ptree.acquire(p.getAddress(), p.masklen);
- Rib rib = new Rib(router_id, nexthop, p.masklen);
-
- if (node.rib != null) {
- node.rib = null;
- ptree.delReference(node);
- }
- node.rib = rib;
-
- }
- br.close();
- conn.disconnect();
-
- } catch (MalformedURLException e) {
-
- e.printStackTrace();
-
- } catch (IOException e) {
-
- e.printStackTrace();
-
- }
-
-
+ //Retrieve the RIB from BGPd during startup
+ retrieveRib();
}
@Override
@@ -307,7 +268,7 @@
log.info ("received topo change" + changelog);
if (change) {
- RestClient.get ("http://localhost:5000/topo_change");
+ //RestClient.get ("http://localhost:5000/topo_change");
}
}
}