Saturday, February 23, 2008

IGMP Proxy

IGMP Proxy is defined in rfc4605.txt.

IGMP proxy is typically used in Edge routers - Either office edge such as gateway routers and provider edge such as DSLAM. One main point to keep in mind is that IGMP proxy is useful only in simple tree topology where tree can be configured manually. For complex trees where manual configuration is not possible, multi cast routing protocols such as PIM should be used. IGMP proxy is very simple in the sense that it acts as IGMP router for downstream interfaces and as a host on upstream interfaces. It listens for IGMP reports coming on downstream interfaces from hosts interested in listing to multicast traffic. It consolidates report information coming from different hosts across different downstream interfaces and send consolidatedreport to upstream routers.

In Office edge routers, the interfaces connected to inside machines are typically downstream interfaces and WAN interfaces connected to ISP routers are upstream interfaces. In case of DSLAM, WAN interfaces towards its customers are downstream interfaces and upstream interface is connected towards Internet.

Multicast stream providers get unique Multicast IP address for each type of stream from IANA. This IP address is advertised. Any machines willing to receive this stream send IGMP membership reports to routers indicating their willingness to receive packets coming on a particular multicast IP address. IGMP protocol is used to send membership reports.

IGMP proxy devices receives multicast stream from upstream interfaces, it knows the downstream interfaces interested in this traffic based on membership reports it received before. It duplicates the traffic and send it to these downstream interfaces. It provides great advantage on cost savings as only one copy of stream is sent on WAN link. Gateway implementing IGMP proxy duplicates on multiple downstream interfaces.

IGMPv3 support source specific multicasting. IGMPv3 hosts can request the stream only when it is generated from a particular source. It provides some kind of security for hosts (note that IP address can be spoofed by rogue multicast stream generator) and more importantly it eases the network routing problems. IGMP proxy should honor v3 memberships with specific source IP address. If proxy receives v2 or v1 membership from local hosts on the same interface, then source specific multicast membership from v3 hosts will not have desired effect.

As discussed before, IGMP proxy acts as IGMP router on downstream interfaces. As an IGMP router, it sends IGMP queries periodically to ensure that hosts are still interested in multicast streams. IGMP routers typically send generic query periodically. Group specific query is sent upon a state change such as host leaving the group.

IGMP Proxy takes responsibility of creating multicast routes based after consolidating membership reports.

With the above background, let me present the IGMP proxy configuration required in gateways.
  • Enable/Disable: Whether IGMP proxy operation is to be enabled or disabled. If it is disabled, this router does not even entertain reception of IGMP messages.
  • Maximum number of groups : This parameter represents the number of groups allowed by IGMP Proxy. Note that 'groups' have one to one association with multiple IP addresses.
  • Robustness: Please rfc3376 for explanation. It is mainly intended for lossy network. This parameter value is default value for 'Startup Query Count' and 'Last Member Query Count'. The queries are sent as many times as 'robustness' count separated by 'Startup Query Interval' and 'Last Member Query internval respectively. Default value is 2 as per rfc3376.
  • Query interval: The number of seconds between two IGMP general query messages. Default : 125 seconds as per rfc3376.
  • Query response interval : Amount of time the querier waits for response to general query. Default is 100 (10 seconds). Each unit corresponds to 100milliseconds.
  • Startup Query Interval : Number of seconds between general queries during startup.
  • Startup Query Count: Number of queries sent out upon startup.
  • Last Member Query Interval: Amount of time router can wait before sending group specific query or group-source specific query in response to leave group messages. Default is 10 (1 second). Unit is equivalent to 100 milliseconds.
  • Last Member Query Count: Number of queries sent upon receiving leave group message.
  • Host Unsolicited Report Interval: This variable used by host portion of IGMP proxy. This value is represented in seconds and is used by host to send reports. Host is expected to send 'robustness variable' number of reports within this time to the routers to cover the possibility of report misses by routers.
  • Downstream interfaces: List of downstream interfaces. Interfaces are typically of type: wireless LAN, USB Ethernet, Ethernet, VLAN and PPP etc..
  • UpStream interfaces: List of upstream interfaces.
  • Log : YES or NO. IT departments always would like to know the network view. IGMP membership information provides valuable information about usage patterns etc.. To provide historical information to know the join and leave intervals of machines for different groups, it is required that log entries are generated. This variable controls whether log is to be generated or keep quiet. Log entry should contain
    • Machine IP address
    • Group IP address (Multicast IP address)
    • Time at which it joined or time at which it left.
    • Interface used for join or leave.

Run time information: Multicast member ship view is very important for administrators to know what is happening at any given time. One would like to know things like - Machines and their membership information and interface information on which the machines are present etc.. To be precise:
  • For each group in IGMP
    • Group Address (Multicast address)
    • For each downstream interface
      • Interface name
      • Time at which this group was added.
      • Source IP addresses included.
      • Source IP addresses excluded.
      • Machines that are interested in this group.

  • Statistics :
  • Number Of General Queries Received,
  • Number Group Specific Queries Received,
  • Number Of Group & Source Specific Queries Received,
  • Number Of Queries Transmitted
  • Number Of V1 Reports Received,
  • Number Of V2 Reports Received,
  • Number Of V3 Reports Received,
  • Number Of Leave messages Received,
  • Number Of Reports Transmitted,

With above in mind, TR-069 model can be represented as:

  • internetGatewayDevice.IGMPProxy P
    • Enable : RW, Integer.
    • MaxNumberOfGroupsAllowed: R, Integer
    • LogEnable: RW, Integer.
    • RobustnessValue: RW, Integer
    • QueryInterval: RW, Integer
    • QueryReponseInterval: RW, Integer
    • StartupQueryInterval: RW, Integer
    • StartupQueryCount: RW, Integer
    • LastMemberQueryInterval: RW, Integer
    • LastMemberQueyrCount: RW, Integer
    • LastMemberQueryCount: RW, Integer
    • HostUnsolicitedReportInterval: RW, Integer
    • internetGatewayDevice.IGMPProxy.Interface.{i} PC
      • InterfaceReference: RW, String : Once assigned, can't be changed. This full qualified name of interface instance of LANDevice, WANIPConnection, WANPPPConnection, VLANInterface.
      • InterfaceType: RW, String. "UPSTREAM", "DOWNSTREAM". Once set, it can't be changed.
    • internetGatewayDevice.IGMPProxy.GroupInfo.{i} P
      • GroupAddress: R, String.
      • internetGatewayDevice.IGMProxy.GroupInfo.{i}.interfaceInfo.{i} P
        • InterfaceReference: Read Only, String.
        • Time : At which group is added. Date & time. Read Only, String type.
        • IncludedSourceIPs: R, String. Comma separated IP addresses.
        • ExcludedSourceIPs: R, String. Common separated IP addresses.
    • internetGatewayDevice.IGMPProxy.statistics P
      • internetGatewayDevice.IGMPProxy.statistics.hostside P
        • NumberOfGeneralQueriesReceived : R, Integer
        • NumberOfGroupSpecificQueriesReceived : R Integer
        • NumberOfGroupAndSourceSpecificQueriesReceived : R, Integer
        • NumberOfReportsTransmitted: R, Integer
      • internetGatewayDevice.IGMPProxy.statistics.routerside P
        • NumberOfQueriesTransmistted : R Integer
        • NumberOfV1ReportsReceived: R, Integer
        • NumberOfV2ReportsReceived: R, Integer
        • NumberOfV3ReportsReceived: R, Integer
        • NumberOfLeaveMessagesReceived: R Integer

No comments: