RTL8309M实现VLAN功能-驱动编进内核

news2024/11/25 12:28:24

 

 

部分硬件实现图 

一、使内核支持802.1Q功能

1、使用内核kernel版本4.19.232

2、make menuconfig 配置内核

3、进入Networking support

4、进入Networking options

 5、把这些都编进内核

6、点击保存退出


 

CONFIG_GARP=y
CONFIG_MRP=y
CONFIG_BRIDGE_VLAN_FILTERING=y
CONFIG_VLAN_8021Q=y
CONFIG_VLAN_8021Q_GVRP=y
CONFIG_VLAN_8021Q_MVRP=y

7、在.config文件中最后会增加这几个宏定义

二、RTL8309M LAN 驱动加入到内核

1、修改文件

drivers/net/ethernet/stmicro/stmmac/stmmac_main.c 

在函数

static int stmmac_init_phy(struct net_device *dev)

添加如下程序

if(phydev!=NULL)
{
	dev_err(priv->device, "%s phy_id:%x mii:%p bus_id:%x\n",
	__func__, phydev->phy_id,priv->mii,priv->plat->bus_id);

	if(priv->plat->bus_id == 0 && priv->mii!=NULL)
	{
		rtl8309m_phy_fixup(priv->mii);
	}
}

netdev_err(priv->dev, "%s: trying to attach to %p\n", __func__,phydev);

2、 rtl8309m_phy_fixup函数实现如果

#include "rtk_api.h"
#include "mdcmdio.h"
#include "rtk_api_ext.h"
#include "rtl8309n_asicdrv_ext.h"

static int rtl8309m_phy_fixup(struct mii_bus *mii)
{
	int i;
	static int devinit = 0;
	rtk_portmask_t mbrmsk , untagmsk;

	if(devinit == 0)
	{

		setSwitchDev(mii);
		rtk_switch_init();
		printk("rtk_switch_init\r\n");
		rtk_vlan_init();
		printk("rtk_vlan_ini\r\n");

		for(i=0;i<8;i++)
		{
			mbrmsk.bits[0] = (1<<8)|(1<<i);
			untagmsk.bits[0] = (1<<8)|(1<<i);
			rtk_vlan_set(100+i,mbrmsk,untagmsk,1);
			printk("rtk_vlan_set port %d \r\n",i);
		}
		
		devinit = 1;
	}

	return 0;
}

 3、以下函数接口通过下面文件实现

setSwitchDev(mii);
rtk_switch_init();
rtk_vlan_init();
rtk_vlan_set();
 

下载路径

https://download.csdn.net/download/u011425939/88002036

4、修改文件

drivers/net/ethernet/stmicro/stmmac/Makefile

 mdcmdio.c   rtk_api.c  rtl8309n_asicdrv.c

 把这个三个文件编译进去

5、编译kernel 重启下载到设备

三、vlan配置

1、在控制终端输入如下命令

brctl addbr br0  创建网桥

ifconfig br0 192.168.63.1 配置ip

brctl addif br0 eth1 把lan接口eth1 加入到网桥

vconfig add eth1 100  eth1增加vlan id 为100的端口
vconfig add eth1 101  eth1增加vlan id 为101的端口
vconfig add eth1 102  eth1增加vlan id 为102的端口
vconfig add eth1 103  eth1增加vlan id 为103的端口

ifconfig eth1.100 up 启动 eth1.100
ifconfig eth1.101 up 启动 eth1.101
ifconfig eth1.102 up 启动 eth1.102
ifconfig eth1.103 up 启动 eth1.103

注意这里的100 101 102 103 要跟上面vlan设置函数设置的vid要一致,不然实现不了vlan功能

rtk_vlan_set(100+i,mbrmsk,untagmsk,1);

2、ifconfig 查看配置

~ # 
~ # ifconfig
br0       Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          inet addr:192.168.63.1  Bcast:192.168.63.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:80 (80.0 B)

eth0      Link encap:Ethernet  HWaddr 32:89:B0:83:C6:69  
          inet addr:192.168.9.166  Bcast:192.168.9.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:119217 errors:0 dropped:38402 overruns:0 frame:0
          TX packets:14597 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:38667494 (36.8 MiB)  TX bytes:3143376 (2.9 MiB)
          Interrupt:48 

eth1      Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1102 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:188650 (184.2 KiB)
          Interrupt:48 

eth1.100  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.101  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1100 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:184142 (179.8 KiB)

eth1.102  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.103  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.104  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.105  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.106  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

eth1.107  Link encap:Ethernet  HWaddr 02:FB:88:C0:86:81  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:1255 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1255 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:308550 (301.3 KiB)  TX bytes:308550 (301.3 KiB)

ra0       Link encap:Ethernet  HWaddr F0:C8:14:4B:15:FC  
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

~ # 

已经实现eth1.100-eth1.104 网络接口

四、通过vlan网络接口实现对单个lan网口进行广播通信

步骤如下

1、创建vlan接收广播信息

2、创建vlan发送广播信息

3、实现对接收数据的处理

以下示例是对接在lan口的网络摄像头进行ip设置的一个运用

对每个lan口使用vlan进行单独的广播,接在对应lan口上的摄像头应答返回ip,然后再发送修改ip的数据报给摄像头,以达到修改ip的目的。

下载路径

https://download.csdn.net/download/u011425939/88002042

五、抓包分析数据

1、向eth1.100端口发送查询摄像头IP数据包

<?xml version="1.0" encoding="UTF-8"?>
<Query>
<Id>e64823ad2a3d-98c56204-525e-46d6-B38A-73C80C478CF9</Id>
<Types>search</Types>
</Query>

 此时在ip层协议下一层加入了802.1Q协议,此时的vlan vid 是100

这些数据包不会在eth1.101 eth1.102 eth1.103 对应的lan口 输出数据,因此可以达到修改对应lan口接的摄像头ip

2、接收到eth1.100端口数据

<?xml version="1.0" encoding="UTF-8"?>
<Answer><ID>5_e6:48:23:ad:2a:3d</ID>
<Operate>Find</Operate>
<MAC>54:D0:C4:C0:02:22</MAC>
<Result>Success</Result>
<IPv4>192.168.63.101</IPv4>
<HttpPort>80</HttpPort>
<IPv4Mask>255.255.255.0</IPv4Mask>
<IPv4Gateway>192.168.63.1</IPv4Gateway>
<DNS>8.8.8.8</DNS>
<Model>F-SC311-21-M51120100001</Model>
<SoftVer>10.1.0.6-r9-onvif</SoftVer>
<HardVer>V1.0</HardVer>
<DeviceName>IP</DeviceName>
<OemModel>F-SC311-21-M51120100001</OemModel>
<RunTime>1248696</RunTime>
</Answer>

 接收到的数据不带802.1q协议,也就是不携带vlan vid,所以不是vlan数据

3、向eth1.100端口发送修改ip摄像头IP数据包

:<?xml version='1.0'encoding='UTF-8'?>
<Quest>
<ID>1_02:1b:bb:24:cc:8b</ID>
<Operate>Modify</Operate>
<CurMAC>54:D0:C4:C0:02:22</CurMAC>
<ModifyMAC>0</ModifyMAC>
<MAC>54:D0:C4:C0:02:22</MAC>
<IPv4>192.168.63.101</IPv4>
<HttpPort>80</HttpPort>
<IPv4Mask>255.255.255.0</IPv4Mask>
<IPv4Gateway>192.168.63.1</IPv4Gateway>
<DNS>8.8.8.8</DNS>
<UserName>admin</UserName>
<Password>c0b3731c7311444835b7c339498a75dc</Password>
</Quest>

4、返回修改后的ip

<?xml version="1.0" encoding="UTF-8"?>
<Answer><ID>1_02:1b:bb:24:cc:8b</ID>
<Operate>Modify</Operate>
<MAC>54:D0:C4:C0:02:22</MAC>
<Result>Success</Result>
<IPv4>192.168.63.101</IPv4>
<HttpPort>80</HttpPort>
<IPv4Mask>255.255.255.0</IPv4Mask>
<IPv4Gateway>192.168.63.1</IPv4Gateway>
<DNS>8.8.8.8</DNS>
<Model>F-SC311-21-M51120100001</Model>
<SoftVer>10.1.0.6-r9-onvif</SoftVer>
<HardVer>V1.0</HardVer>
<DeviceName>IP</DeviceName>
<OemModel>F-SC311-21-M51120100001</OemModel>
<RunTime>631171</RunTime>
</Answer>

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/722883.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

2023年6月第4周大模型荟萃

2023年6月第4周大模型荟萃 2023.6.30版权声明&#xff1a;本文为博主chszs的原创文章&#xff0c;未经博主允许不得转载。 1、腾讯云首次公布大模型进展 6月19日&#xff0c;腾讯云召开行业大模型及智能应用技术峰会&#xff0c;首次公布腾讯云行业大模型研发进展&#xff0…

自定义MVC的初步实现

文章目录 前言一、 工作流程图二、简单的实现自定义MVCController层——Servlet中央控制器子控制器具体Action类 view层——JSP 三、初步实现自定义MVC简单MVC架构中的问题3.1 配置XML文件3.2 建模3.2 Servlet3.3 jsp 前言 在上一篇博客&#xff0c;我们介绍了MVC的演变过程&a…

华为、华三、锐捷、飞塔、山石的抓包命令

一、华为的抓包命令 1、基本概念 华为的抓包行为称之为镜像端口&#xff0c;也就是说将需要抓取的接口上&#xff08;称为镜像端口&#xff09;的流量复制一份到另一个接口上&#xff08;工程师进行流量观察的端口&#xff0c;称为观察端口&#xff09;&#xff0c;如下图所示…

23年hadoop单机版+hive

文章目录 说明分享环境信息安装jdkhadoop配置core-site.xml mysqlhive安装配置hive-site.xml配置hive-env初始化mysql数据库启动验证hive命令hiveserver2方式 总结 说明 工作需要研究hive功能&#xff0c;线上环境不能动&#xff0c;搭建单机版hadoophive测试环境&#xff0c;使…

pyodbc读取.mdb文件时出现[ODBC Microsoft Access Driver] 网络访问已中断。请关闭数据库.....解决方法

在使用pyodbc读取.mdb文件时出现下面的错误 : ODBC Microsoft Access Driver] 网络访问已中断。若要继续&#xff0c;请关闭数据库&#xff0c;然后再将其打开。 (-1022) (SQLDriverConnect) 网上找了很多方法&#xff0c;最后通过下面的方法解决了&#xff0c;就是安装64位的…

搜索团队的技术小结

搜索业务形态 CSDN作为开发者内容中心&#xff0c;主要通过分发博客和商业产品&#xff08;下载资源&#xff09;满足用户碎片化学习需求&#xff1b;产品形态上通过以下3种方式来承接用户需求 1. 站内搜索框 2. 博客相关推荐 3. 下载相…

前端基础知识学习——滑动门(利用背景图像的可层叠性 创造特殊效果)

滑动门&#xff1a;利用背景图像的可层叠性&#xff0c;并允许他们在彼此之上进行滑动&#xff0c;以创造一些特殊的效果。 举例&#xff1a; <!DOCTYPE html> <html lang"en"> <head><meta charset"UTF-8"><meta name"…

Linux快速搭建Java环境

1. 安装JDK运行与调试 搭建Java环境 1. 安装JDK 打开命令行执行 sudo apt install default-jdk 有确定的选项直接y就行 安装拓展: 1 . 有时候vscode会自动弹出消息叫你安装拓展,直接点击全部安装就行了 2 . 未弹出或安装失败解决: 打开拓展搜索,把下面的,全部安装就行 这样就可…

适合小企业的小型CRM软件如何选择

市场上有很多小型CRM软件&#xff0c;但很多企业在选型时不知道如何选择&#xff0c;应该考虑哪些因素&#xff0c;什么样的小型CRM软件好&#xff1f;推荐您选择专为小企业设计的CRM客户管理系统。 1、适合初学者&#xff1a; 适合没有使用过CRM软件的企业或个人&#xff0c…

ApiJson json转sql部分示例

ApiJson json转sql部分示例&#xff08;关于json较多&#xff0c;仅供自己快速回顾&#xff09; 首先提供腾讯的APIJSON文档的网址&#xff0c;内容来自于此&#xff1a;部分示例图片 首先提供腾讯的APIJSON文档的网址&#xff0c;内容来自于此&#xff1a; 链接: APIJSON文档…

Matlab隐藏彩蛋

Matlab中的彩蛋实现与Matlab的版本有着重要关系&#xff0c;像Android一样&#xff0c;不同的版本对应不同的彩蛋。这里以Matlab 2016A为例。 1.最著名的一个&#xff0c;命令行窗口输入“image”&#xff0c;就会出现一张倒置的小孩脸&#xff0c;不知情的使用者很可能会被吓…

Solved: “The unsigned image‘s hash is not allowed (DB)“

Solved: “The unsigned image’s hash is not allowed (DB)” 原因是 Secure Boot 的锅 In Hyper-V Manager, make sure the virtual machine is turned off. Select the virtual machine.Right click and select “Settings”Go to “Security”Uncheck “Enable Secure Boo…

【算法系列】滑动窗口

计算长度为k的连续子数组的最大总和 给定一个整数数组&#xff0c;计算长度为k的连续子数组的最大总和。 输入&#xff1a;arr [] {100,200,300,400} k 2输出&#xff1a;700解释&#xff1a;300 400 700解决思路 暴力解法&#xff1a;从k到n-k1&#xff0c;计算k长度大…

短视频seo矩阵系统+抖音小程序源码开源部署(二)

一、短视频矩阵源码系统开发要则&#xff1a; 1. 需求分析&#xff1a;对短视频平台的需求进行全面分析&#xff0c;确立系统开发目标和方向。 2. 技术选型&#xff1a;选用最适合的技术开发短视频矩阵系统&#xff0c;如前端框架、数据库、服务器等。 3. 系统设计&#xff…

Parseval’s theorem

一、Parseval’s theorem介绍 帕塞瓦尔定理Parseval’s theorem表明了信号的能量在时域和频域相等。 ∫ − ∞ ∞ ∣ f ( t ) ∣ 2 d t 1 2 π ∫ − ∞ ∞ ∣ F ( ω ) ∣ 2 d ω ∫ − ∞ ∞ ∣ F ^ ( f ) ∣ 2 d f \int_{-\infty}^{\infty}|f(t)|^{2} \mathrm{~d} t\frac…

Android Studio实现内容丰富的安卓美食管理发布平台

如需源码可以添加q-------3290510686&#xff0c;也有演示视频演示具体功能&#xff0c;源码不免费&#xff0c;尊重创作&#xff0c;尊重劳动。 项目编号079 1.开发环境 android stuido jdk1.8 eclipse mysql tomcat 2.功能介绍 安卓端&#xff1a; 1.注册登录 2.查看公告 3.查…

web安全php基础_php数据类型

PHP 数据类型 PHP 支持以下几种数据类型: String&#xff08;字符串&#xff09;Integer&#xff08;整型&#xff09;Float&#xff08;浮点型&#xff09;Boolean&#xff08;布尔型&#xff09;Array&#xff08;数组&#xff09;Object&#xff08;对象&#xff09;NULL&…

2023 亚马逊云科技中国峰会:全面加码 AIGC、深耕中国下一个十年

编辑 | 宋慧 出品 | CSDN 云计算 亚马逊云科技每年在中国的顶级会议——2023亚马逊云科技中国峰会如期而至。今年中国峰会回归线下举办&#xff0c;主会场和分论坛几乎全部爆满&#xff0c;技术展区人头攒动&#xff0c;现场技术赛事与开发者大讲堂活动丰富精彩&#xff0c;可…

基于SSM的高校专业信息管理系统的设计与实现

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;采用JSP技术开发 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#x…

【UE】通过滑条放大子画面

在文章&#xff08;【UE4 第一人称射击游戏】33-创建一个小地图&#xff09; 基础上实现通过滑条放大子画面 效果 步骤 在控件蓝图中拖入滑条组件 主要的思想就是当滑条的值变更时去改变摄像机相对位置