创建VLAN的程序代码
来源:互联网 发布:张大奕淘宝店铺 编辑:程序博客网 时间:2024/04/30 09:09
1,本来打算是用NETLINK 套接口机制实现创建/添加VLAN 的,但是没有成功。NETLINK帮组文档中:RTM_NEWLINK - Create a new network interface说得很清楚是可以创建新的网络接口的,但是本人水品有限,对代码修改了很多遍尝试很多可能,花了大量时间最终没有成功,真失败呀,不知哪里出了问题,有高人了解指点下感激不尽。最后考虑用ioctl来实现,如此简单,真是得来全部费功夫。
2,哈哈,废话不多说看代码。
#include <stdio.h>
#include <stdlib.h>
#include <sys/socket.h>
#include <sys/types.h>
#include <linux/if_vlan.h>
#include <sys/ioctl.h>
#include <errno.h>
#include <linux/sockios.h>
int main(int argc ,char **argv){
int fd;
struct vlan_ioctl_args if_request; //定义vlan参数的结构体变量,这结构体包括接口名,vlan ID等参数
char *if_name;
int vid;
if(argc!=4){
printf("usage:%s add eth* vlanID\n",argv[0]);
exit(1);
}
if_name=argv[2];
strcpy(if_request.device1,if_name); //把if_name的值拷贝到device1中
if_request.u.VID=atoi(argv[3]);
vid=if_request.u.VID;
if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0) { //创建socket获得socket ID
fprintf(stderr, "FATAL: Couldn't open a socket..go figure!\n");
exit(2);
}
if(strcmp(argv[1],"add")==0){
if_request.cmd=ADD_VLAN_CMD; //vlan 动作,ADD_VLAN_CMD代表添加一个vlan
if (ioctl(fd, SIOCSIFVLAN, &if_request) < 0) {
fprintf(stderr,"ERROR: trying to add VLAN #%u to IF -:%s:- error: %s\n",vid, if_name,strerror(errno));
exit(3);
}
else {
fprintf(stdout,"Added VLAN with VID == %u to IF -:%s:-\n",vid, if_name);
if (vid == 1) {
fprintf(stdout, "WARNING: VLAN 1 does not work with many switches,\nconsider another number if you have problems.\n");
}
}
}
}
3,程序运行后的效果
eth1 Link encap:以太网 硬件地址 00:0c:29:d8:8f:5a
inet 地址:10.168.50.27 广播:10.168.50.255 掩码:255.255.255.0
inet6 地址: fe80::20c:29ff:fed8:8f5a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:610 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:686 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:482136 (482.1 KB) 发送字节:174180 (174.1 KB)
中断:18 基本地址:0x1400
lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:4 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:4 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:240 (240.0 B) 发送字节:240 (240.0 B)
tom@net-tom:~/route$ sudo ./add_vlan add eth1 2
Added VLAN with VID == 2 to IF -:eth1:-
tom@net-tom:~/route$ ifconfig -a
eth1 Link encap:以太网 硬件地址 00:0c:29:d8:8f:5a
inet 地址:10.168.50.27 广播:10.168.50.255 掩码:255.255.255.0
inet6 地址: fe80::20c:29ff:fed8:8f5a/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 跃点数:1
接收数据包:636 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:706 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:1000
接收字节:492544 (492.5 KB) 发送字节:181060 (181.0 KB)
中断:18 基本地址:0x1400
eth1.2 Link encap:以太网 硬件地址 00:0c:29:d8:8f:5a
BROADCAST MULTICAST MTU:1500 跃点数:1
接收数据包:0 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:0 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:0 (0.0 B) 发送字节:0 (0.0 B)
lo Link encap:本地环回
inet 地址:127.0.0.1 掩码:255.0.0.0
inet6 地址: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 跃点数:1
接收数据包:4 错误:0 丢弃:0 过载:0 帧数:0
发送数据包:4 错误:0 丢弃:0 过载:0 载波:0
碰撞:0 发送队列长度:0
接收字节:240 (240.0 B) 发送字节:240 (240.0 B)
- 创建VLAN的程序代码
- 思科交换机创建vlan的命令是什么??
- centos 创建vlan
- 创建流策略隔离VLAN间的访问
- 什么是vlan:VLAN的优点
- Linux下VLAN创建举例
- 三层交换机创建VLAN方法
- 最棒的程序代码,不是程序代码
- 最棒的程序代码,不是程序代码
- java程序代码的优化
- Javasctipt的验证程序代码!
- 删除自身的程序代码
- 程序代码的良好设计
- 振奋人心的程序代码注释
- 各类程序代码 的网站
- java常用的程序代码
- 程序代码的优化细节
- Python的hello程序代码
- 缩小造成问题的原因
- VC调用C#写的DLL
- HDU1166树状数组
- Thread Id and Thread Handle
- SQL 数据库备份
- 创建VLAN的程序代码
- iphone4原理图
- 公司HR面试经常问的问题及回答思路
- 内存颗粒和模组编号知识60问
- g723源码详细分析-14-感知加权滤波器补充
- linux系统故障修复
- ADO.Net实用技巧两则
- HDU1281-棋盘游戏-二分匹配与增广链
- 简单分业(带参-适合中小型)_.net