diff --git a/src/main/java/net/floodlightcontroller/firewall/FirewallRule.java b/src/main/java/net/floodlightcontroller/firewall/FirewallRule.java index d9b26121690df67b26cb3121f5b7bc719cb4c936..127b9658d31cfb6a9d19b6cdabcee0f249e0c08a 100644 --- a/src/main/java/net/floodlightcontroller/firewall/FirewallRule.java +++ b/src/main/java/net/floodlightcontroller/firewall/FirewallRule.java @@ -1,5 +1,6 @@ package net.floodlightcontroller.firewall; +import org.codehaus.jackson.map.annotate.JsonSerialize; import org.openflow.protocol.OFMatch; import net.floodlightcontroller.packet.Ethernet; @@ -8,6 +9,7 @@ import net.floodlightcontroller.packet.IPv4; import net.floodlightcontroller.packet.TCP; import net.floodlightcontroller.packet.UDP; +@JsonSerialize(using=FirewallRuleSerializer.class) public class FirewallRule implements Comparable<FirewallRule> { public int ruleid; diff --git a/src/main/java/net/floodlightcontroller/firewall/FirewallRuleSerializer.java b/src/main/java/net/floodlightcontroller/firewall/FirewallRuleSerializer.java new file mode 100644 index 0000000000000000000000000000000000000000..98b566a081fe9ba7b1518b4bec74e605bb7715ad --- /dev/null +++ b/src/main/java/net/floodlightcontroller/firewall/FirewallRuleSerializer.java @@ -0,0 +1,55 @@ +package net.floodlightcontroller.firewall; + +import java.io.IOException; + +import net.floodlightcontroller.packet.IPv4; +import net.floodlightcontroller.util.MACAddress; + +import org.codehaus.jackson.JsonGenerator; +import org.codehaus.jackson.JsonProcessingException; +import org.codehaus.jackson.map.JsonSerializer; +import org.codehaus.jackson.map.SerializerProvider; + +/** + * Serialize a FirewallRule object + * Implemented to output easily readable MAC, IP addresses + * @author Jason Parraga + */ +public class FirewallRuleSerializer extends JsonSerializer<FirewallRule> { + + @Override + public void serialize(FirewallRule rule, JsonGenerator jGen, + SerializerProvider serializer) throws IOException, + JsonProcessingException { + jGen.writeStartObject(); + + jGen.writeNumberField("ruleid", rule.ruleid); + jGen.writeNumberField("dpid", rule.dpid); + jGen.writeNumberField("in_port", rule.in_port); + jGen.writeStringField("dl_src",String.valueOf(MACAddress.valueOf(rule.dl_src))); + jGen.writeStringField("dl_dst", String.valueOf(MACAddress.valueOf(rule.dl_dst))); + jGen.writeNumberField("dl_type", rule.dl_type); + jGen.writeStringField("nw_src_prefix", IPv4.fromIPv4Address(rule.nw_src_prefix)); + jGen.writeNumberField("nw_src_maskbits", rule.nw_src_maskbits); + jGen.writeStringField("nw_dst_prefix", IPv4.fromIPv4Address(rule.nw_dst_prefix)); + jGen.writeNumberField("nw_dst_maskbits", rule.nw_dst_maskbits); + jGen.writeNumberField("nw_proto", rule.nw_proto); + jGen.writeNumberField("tp_src", rule.tp_src); + jGen.writeNumberField("tp_dst", rule.tp_dst); + jGen.writeBooleanField("wildcard_dpid", rule.wildcard_dpid); + jGen.writeBooleanField("wildcard_in_port", rule.wildcard_in_port); + jGen.writeBooleanField("wildcard_dl_src", rule.wildcard_dl_src); + jGen.writeBooleanField("wildcard_dl_dst", rule.wildcard_dl_dst); + jGen.writeBooleanField("wildcard_dl_type", rule.wildcard_dl_type); + jGen.writeBooleanField("wildcard_nw_src", rule.wildcard_nw_src); + jGen.writeBooleanField("wildcard_nw_dst", rule.wildcard_nw_dst); + jGen.writeBooleanField("wildcard_nw_proto", rule.wildcard_nw_proto); + jGen.writeBooleanField("wildcard_tp_src", rule.wildcard_tp_src); + jGen.writeBooleanField("wildcard_tp_dst", rule.wildcard_tp_dst); + jGen.writeNumberField("priority", rule.priority); + jGen.writeStringField("action", String.valueOf(rule.action)); + + jGen.writeEndObject(); + } + +} \ No newline at end of file diff --git a/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java b/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java index 34d1b4df0cc64523173fbe35ab87be1c40fba91c..d7291a6ca6546a619aaca82c585136f2a4de9f10 100644 --- a/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java +++ b/src/main/java/net/floodlightcontroller/firewall/FirewallRulesResource.java @@ -23,7 +23,7 @@ public class FirewallRulesResource extends ServerResource { protected static Logger log = LoggerFactory.getLogger(FirewallRulesResource.class); @Get("json") - public Object handleRequest() { + public List<FirewallRule> retrieve() { IFirewallService firewall = (IFirewallService)getContext().getAttributes(). get(IFirewallService.class.getCanonicalName());