package net.onrc.onos.core.linkdiscovery.internal;

import net.floodlightcontroller.core.web.serializers.DPIDSerializer;
import net.floodlightcontroller.core.web.serializers.IPv4Serializer;

import org.codehaus.jackson.annotate.JsonProperty;
import org.codehaus.jackson.map.annotate.JsonSerialize;

/**
 * Topology Switch event history related classes and members
 *
 * @author subrata
 */
public class EventHistoryTopologySwitch {
    // The following fields are not stored as String to save memory
    // They should be converted to appropriate human-readable strings by
    // the front end (e.g. in cli in Python)
    public long dpid;
    public int ipv4Addr;
    public int l4Port;
    public String reason;

    @JsonProperty("Switch")
    @JsonSerialize(using = DPIDSerializer.class)
    public long getDpid() {
        return dpid;
    }

    @JsonProperty("IpAddr")
    @JsonSerialize(using = IPv4Serializer.class)
    public int getIpv4Addr() {
        return ipv4Addr;
    }

    @JsonProperty("Port")
    public int getL4Port() {
        return l4Port;
    }

    @JsonProperty("Reason")
    public String getReason() {
        return reason;
    }


}
