summaryrefslogtreecommitdiffstats
path: root/target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping
diff options
context:
space:
mode:
Diffstat (limited to 'target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping')
-rw-r--r--target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/igmp_delete.c8
-rw-r--r--target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping.c20
-rw-r--r--target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_glue.c18
-rw-r--r--target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_local.h2
-rw-r--r--target/linux/realtek/files/drivers/net/rtl819x/igmpsnooping/rtl865x_igmpsnooping_new.c34
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)