diff options
Diffstat (limited to 'target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping')
5 files changed, 43 insertions, 39 deletions
diff --git a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/igmp_delete.c b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/igmp_delete.c index 2b3ec0057..3cb8028c1 100644 --- a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/igmp_delete.c +++ b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/igmp_delete.c @@ -1,3 +1,11 @@ +/*
+ *
+ * Copyright (c) 2011 Realtek Semiconductor Corp.
+ *
+ * This program is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License version 2 as
+ * published by the Free Software Foundation.
+ */
#include <linux/module.h>
#include <linux/proc_fs.h>
diff --git a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping.c b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping.c index bdc097f7e..4f01408e3 100644 --- a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping.c +++ b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping.c @@ -1,26 +1,16 @@ /* -* Copyright c Realsil Semiconductor Corporation, 2006 -* All rights reserved. -* * Program : igmp snooping function * Abstract : * Author :qinjunjie * Email:qinjunjie1980@hotmail.com * +* Copyright (c) 2011 Realtek Semiconductor Corp. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. */ -/* @doc Realtek_Igmp_Snooping_API - - @module rtl865x_igmpsnooping.c - Realtek Igmp Snooping API documentation | - This document explains the API interface of the igmp snooping module. - @normal Jun-Jie Qin (qjj_qin@realsil.com.cn) <date> - - Copyright <cp>2009 Realtek<tm> Semiconductor Cooperation, All Rights Reserved. - @head3 List of Symbols | - Here is a list of all functions and variables in this module. - - @index | Realtek_Igmp_Snooping_API -*/ #ifdef __linux__ #include <linux/config.h> #include <linux/jiffies.h> diff --git a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_glue.c b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_glue.c index 65ac56983..72be54a76 100644 --- a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_glue.c +++ b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_glue.c @@ -10,26 +10,10 @@ */ -/* @doc RTL865X_IGMP_GlUE_API - - @module rtl865x_igmpsnooping_glue.c - RTL865x Igmp Snooping Glue Function documentation | - This document lists the glue functions when porting multicast snooping to different platform. - @normal Jun-Jie Qin (qjj_qin@realsil.com.cn) <date> - - Copyright <cp>2006 Realsil<tm> Semiconductor Cooperation, All Rights Reserved. - - @head3 List of Symbols | - Here is a list of all functions and variables in this module. - - @index | RTL8306_MULTICAST_GlUE_API -*/ - - - #include <net/rtl/rtl_types.h> #include <net/rtl/rtl_glue.h> #include <net/rtl/rtl865x_igmpsnooping_glue.h> -#include "../AsicDriver/rtl865xc_asicregs.h" +#include "AsicDriver/rtl865xc_asicregs.h" #ifdef __linux__ #include <linux/mm.h> diff --git a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_local.h b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_local.h index bf7557e58..01bf67714 100644 --- a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_local.h +++ b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_local.h @@ -21,6 +21,8 @@ /* ip 225.1.1.1 is not in the list of "http://www.iana.org/assignments/multicast-addresses/multicast-addresses.xml",
but it is used by customer's VoIP phone device.
*/
+#define IS_RESERVE_MULTICAST_MDNS_ADDR_V4(ipv4addr) ((((uint32)(ipv4addr)) & 0xFFFFFFFF) == 0xE00000FB)//224.0.0.251
+#define IS_RESERVE_MULTICAST_MDNS_ADDR_V6(ipv6addr) (((ipv6addr[0] & 0xFFFFFFFF)==0xff020000)&&((ipv6addr[1] & 0xFFFFFFFF)==0x00000000)&&((ipv6addr[2] & 0xFFFFFFFF)==0x00000000)&&((ipv6addr[3] & 0xFFFFFFFF)==0x000000FB))
#define RESERVE_MULTICAST_ADDR2 0xE1010101 //225.1.1.1
#define IN_MULTICAST_RESV1(addr) ((((uint32)(addr)) & 0xFFFFFF00) == 0xe0000000) // 224.0.0.x
#define IN_MULTICAST_RESV2(addr) ((((uint32)(addr)) & 0xFF000000) == 0xEF000000) // 239.0.0.0~239.255.255.255
diff --git a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_new.c b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_new.c index a9d16c5af..e79d6a35d 100644 --- a/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_new.c +++ b/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_new.c @@ -1,12 +1,14 @@ /* -* Copyright c Realsil Semiconductor Corporation, 2009 -* All rights reserved. -* * Program : igmp snooping function * Abstract : * Author :qinjunjie * Email:qinjunjie1980@hotmail.com * +* Copyright (c) 2011 Realtek Semiconductor Corp. +* +* This program is free software; you can redistribute it and/or modify +* it under the terms of the GNU General Public License version 2 as +* published by the Free Software Foundation. */ #ifdef __linux__ @@ -1106,7 +1108,6 @@ static void rtl_freeMcastFlowEntry(struct rtl_mcastFlowEntry* mcastFlowEntry) *********************************************/ /* find a group address in a group list */ - struct rtl_groupEntry* rtl_searchGroupEntry(uint32 moduleIndex, uint32 ipVersion,uint32 *multicastAddr) { struct rtl_groupEntry* groupPtr = NULL; @@ -5474,6 +5475,16 @@ int32 rtl_getMulticastDataFwdInfo(uint32 moduleIndex, struct rtl_multicastDataIn return SUCCESS; } #endif + + //added for MDNS packets + if ((IS_RESERVE_MULTICAST_MDNS_ADDR_V4(multicastDataInfo->groupAddr[0])&&multicastDataInfo->ipVersion==IP_VERSION4) + ||(IS_RESERVE_MULTICAST_MDNS_ADDR_V6(multicastDataInfo->groupAddr)&&multicastDataInfo->ipVersion==IP_VERSION6)) + { + multicastFwdInfo->reservedMCast=TRUE; + multicastFwdInfo->fwdPortMask=0xFFFFFFFF; + + return FAILED; + } groupEntry=rtl_searchGroupEntry(moduleIndex,multicastDataInfo->ipVersion, multicastDataInfo->groupAddr); @@ -6190,7 +6201,9 @@ int igmp_show(struct seq_file *s, void *v) int32 flowCnt; struct rtl_mcastFlowEntry *mcastFlowEntry=NULL; #endif - + #if defined (CONFIG_RTL_MLD_SNOOPING) + int mldVersion; + #endif for(moduleIndex=0; moduleIndex<MAX_MCAST_MODULE_NUM ;moduleIndex++) { if(rtl_mCastModuleArray[moduleIndex].enableSnooping==TRUE) @@ -6321,7 +6334,14 @@ int igmp_show(struct seq_file *s, void *v) clientCnt=0; while (clientEntry!=NULL) { - + if(clientEntry->igmpVersion==IGMP_V3) + { + mldVersion = MLD_V2; + } + else + { + mldVersion = MLD_V1; + } clientCnt++; seq_printf(s, " <%d>%x%x%x%x%x%x%x%x-%x%x%x%x%x%x%x%x-%x%x%x%x%x%x%x%x-%x%x%x%x%x%x%x%x\\port %d\\MLDv%d\\",clientCnt, (clientEntry->clientAddr[0])>>28,(clientEntry->clientAddr[0]<<4)>>28, (clientEntry->clientAddr[0]<<8)>>28,(clientEntry->clientAddr[0]<<12)>>28, @@ -6332,7 +6352,7 @@ int igmp_show(struct seq_file *s, void *v) (clientEntry->clientAddr[2]<<16)>>28,(clientEntry->clientAddr[2]<<20)>>28,(clientEntry->clientAddr[2]<<24)>>28, (clientEntry->clientAddr[2]<<28)>>28, (clientEntry->clientAddr[3])>>28,(clientEntry->clientAddr[3]<<4)>>28, (clientEntry->clientAddr[3]<<8)>>28,(clientEntry->clientAddr[3]<<12)>>28, (clientEntry->clientAddr[3]<<16)>>28,(clientEntry->clientAddr[3]<<20)>>28,(clientEntry->clientAddr[3]<<24)>>28, (clientEntry->clientAddr[3]<<28)>>28, - clientEntry->portNum, clientEntry->igmpVersion); + clientEntry->portNum, mldVersion); seq_printf(s, "%s",(clientEntry->groupFilterTimer>rtl_sysUpSeconds)?"EXCLUDE":"INCLUDE"); if(clientEntry->groupFilterTimer>rtl_sysUpSeconds) |
