diff options
Diffstat (limited to 'framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java')
-rw-r--r-- | framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java | 98 |
1 files changed, 98 insertions, 0 deletions
diff --git a/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java new file mode 100644 index 00000000..70ff5563 --- /dev/null +++ b/framework/src/onos/utils/misc/src/main/java/org/onlab/packet/IGMPGroup.java @@ -0,0 +1,98 @@ +/* + * Copyright 2015 Open Networking Laboratory + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.onlab.packet; + +import java.nio.ByteBuffer; +import java.util.ArrayList; +import java.util.List; + +/** + * A class to represent Groups for membership query and reports. + */ +public abstract class IGMPGroup { + + protected int auxInfo; + protected IpAddress gaddr; + protected List<IpAddress> sources = new ArrayList<>(); + + public IGMPGroup() { + } + + /** + * Initialize this object with a multicast group address and additional info. + * + * @param gaddr: the multicast group address for this message type. + * @param auxInfo: additional info potentially used by IGMPQuery + */ + public IGMPGroup(IpAddress gaddr, int auxInfo) { + this.gaddr = gaddr; + this.auxInfo = auxInfo; + } + + /** + * Get the multicast group address. + * + * @return the group address + */ + public IpAddress getGaddr() { + return this.gaddr; + } + + /** + * Get the auxillary info. + * + * @return the auxillary info + */ + public int getAuxInfo() { + return this.auxInfo; + } + + /** + * Add a unicast source address to this message. + * + * @param saddr IPv4 unicast source address + */ + public void addSource(IpAddress saddr) { + sources.add(saddr); + } + + /** + * Return the list of source addresses. + * + * @return list of source addresses + */ + public List<IpAddress> getSources() { + return sources; + } + + /** + * Deserialize an IGMPQuery or IGMPMembership message. + * + * @param bb the ByteBuffer wrapping the serialized message. The position of the + * ByteBuffer should be pointing at the head of either message type. + * @return An object populated with the respective IGMPGroup subclass + * @throws DeserializationException in case deserialization goes wrong + */ + public abstract IGMPGroup deserialize(ByteBuffer bb) throws DeserializationException; + + /** + * Serialize the IGMPGroup subclass. + * + * @param bb the ByteBuffer to write into, positioned at the next spot to be written to. + * @return The serialized message + */ + public abstract byte[] serialize(ByteBuffer bb); +} |