Terminology
IGMP | Internet Group Management Protocol |
---|---|
CPE | Customer Premise Equipment |
ONOS | Open Network Operation System |
OF | OpenFlow |
vOLT | Virtualized Optical Line Terminal |
ONT | Optical Network Terminal |
SD-OLT | Software Defined Optical Line Terminal |
-
IGMP Overview and feature list
- Support Igmp join
IGMP Proxy app receives and decodes igmp report messega from hosts. if the host ask to join a group, Igmpproxy will add flow rule for the multicast traffic to olt .And if it is the first host join into the group, Igmpproxy will forward the message to olt uplink port.
If it is not the first host that joins into the multicast group, Igmpproxy will add bucket into the flow rule, but will not forward to uplink port.
IGMP Proxy app receives and decodes igmp report message from host, if the host ask to leave a group, igmpproxy will raise a query to the group and wait for hosts’ response. If any host not response for the query, Igmpproxy will remove the host from this group.
IGMP Proxy app receives and decodes igmp report message from host, if the host ask to leave a group, Igmpproxy will remove bucket from the group’s flow rule.
If it is the latest host that existing in the group, Igmpproxy will forward the message to olt uplink port.
Igmpproxy will periodical sent query message to each existing group, If any host not response for the query, Igmpproxy will remove the host from this group.
App layer:
-
Igmpproxy: Nokia developed app for igmp (use proxy mode).
-
IgmpSnoop: ONOS official app for igmp (use snoop mode).
-
Cordmcast: ONOS official app , as the adapter between onos core service and specific igmp implements
Onos Core Layer:
-
Flow objective: for specific device and behavior, to find a driver for adaption
-
Netconfig Service: Used for our REST interface
-
Packet Service: To receive , decode, encode and dispatch openflow messages from/to devices
-
Device Service: To communicate with device via connection point
Driver Layer:
-
Olt pipeline: driver for our OLT device.
- Igmp Message Flow
Comment:
For step 9, for performance purpose, is not really removing the rules. Just remove the output port from the group rule.
Apps and Sub-systems:
Igmpproxy App
- Host state machine(interact with multicast source), refer to RFC 2236
-
To join group, send add sink to Cordmcast
-
To leave group, send remove sink to Cordmcast
- source host management(interact with hosts)
-
accept and process Igmp join/leave packet form hosts
-
Find first join host and last leave host, inform the state machine
- Igmp packet encode/decode and dispatch
-
To decode v2/v3 igmp packet, and dispatch them into different subsystems
-
For v3 join packet, divided it with different group addresses
-
Rest interface (use onos network configuration service) subsystems, for user configuration
Cordmcast App:
Receive add sink/ remove sink message, translate into forward and next primitives, and send those primitives to olt pipeline
Olt pipeline:
Receive forward/next primitives, translate to openflow rules, send group add/remove, flow add/remove messages to OLT
-
Subsystem Design
-
host State Machine
Index: mvlan + group ip + devid , we use this index to indicate a host. And for each host, we implement a independent state machine, see the chart below, refer to RFC 2236
-
Event description:
-
join/leave comes from packet-in message , received from the uni port
-
query comes from packet-in message m received from the uplink port
Action description:
-
send report/leave means send those IGMP packet to the uplink port of device;
-
Timer:
for join event, the timer is [0, Unsolicited Report Interval], Unsolicited Report Interval is an user configured value.
for query event,the timer is [0, Max Resp Time], Max Resp Time is a field in query packet.
Implementation:
-
For general query,retrieve all hosts which belong to the group, and send query message.
For specific query, only send the message to the specific host
-
If last member leave the group, the state machine will be removed , and a remove sink message will be sent to Cordmcast. For performance purpose, ONOS will not really remove the rules. Just remove the output port from the group rule.
-
South host management
- Description
South host management divided into 2 sub-module:Southbound Hosts Management and Northbound Reporter,as the chart below:
Index: mvlan + group ip + devid + port
Action:
-
When receive join/leave message to a new index, forward message to Northbound Reporter;
Filter messages with same index
-
When receive the leave message and the fast leave switch is turned off, send query to all hosts which belong to the same group. It is because maybe some hosts join into same group.
-
Aging: we will send query message to each hosts in a fixed period, if no response, we will remove the host.
- Northbound Reporter
Index:mvlan + groupip + devid
Action:
-
Receive join leave messages from Southbound Hosts Management.
-
If it is the first host that join into a specific group, send add sink to Cordmcast;
If it is not the first host to join , just increase the group’s host counter;
If it is the last host leave from the group, send remove sink to Cordmcast;
If it is not the last host to leave, just decrease the group’s host counter.
- IGMP packet encode/decode and dispatch
Action:
-
Receive igmp message from device, decode it;
-
If it is IGMP v3 reporter and include multiple groups, divided it into some packet with single group;
-
Dispatch the packet to different subsystems.
The flow chart:
-
External Interface
- NBI REST-API
Parameter Unsolicited TimeOut, Max Respose times, Keep Alive Interval, Last Query Interval, Last Query Count, Fast Leave flags can be configured through REST-API provided by ONOS
Please refer to REST-API for ONOS APP (3HH-12876-0211-DDZZA) for details
-
SBI Openflow
- Lift Rule:
type | Call situation | Match field | Match value | Action field | Action value |
---|---|---|---|---|---|
Add flow | igmp app activate | Ethernet | IPV4 | Output port | controller |
Protocol | IGMP | ||||
port | {all activated port } | ||||
Delete flow | igmp app deactivate, or port state change to disable | Ethernet | IPV4 | ||
Protocol | IGMP | ||||
port | {All activated port if app goes down, or the port which change state to disable} | N/A |
This flow rule is used for instructing olt to transmit the received igmp packets to the controller. Once the igmp app is initialized , the device information is registered in ONOS, and the port is enabled, Igmp app will send this flow rule to the device for each of its activated port automatically.
The flow rules would be removed while igmpproxy app deactivated.
type | Call situation | Match field | Match value | Action field | Action value |
---|---|---|---|---|---|
Group add | Receive igmp join | With group id as the key | N/A | Output port | {host port} |
Group mod (delete port) | Receive igmp leave | With group id as the key | N/A | N/A | N/A |
Add flow | Receive igmp join | Ethernet | IPV4 | Group | Group id |
In Port | {uplink port} | ||||
IPDst | {group address} | ||||
Vlan Id | mcast vlan |
This flow rule is used for instructing olt to forward the igmp traffic from uplink port to the ONU port. Once the igmp join packet was received and processed succesfully , Igmp app will send this flow rule (a group add message and a flow add message) to the port which report the igmp join;
If host request to leave a group, a group mod message will send to olt, and the out port of group rule would be removed;
If host re-send join message to ONOS, a group mod message will send to olt, which to add the out port again.
Packet Types | Description |
---|---|
Membership Query Message | Membership Queries are sent by IP multicast routers to query the multicast reception state of neighboring interfaces |
Version 3 Membership Report Message | Version 3 Membership Reports are sent by IP systems to report (to neighboring routers) the current multicast reception state, or changes in the multicast reception state, of their interfaces. |
For more Igmp packet detail, please refer to RFC 3376