2009年2月24日星期二

使用Ioctl向Linux内核传递参数的方法

一、应用层

         uint16 data16;

         if ((fd = socket(AF_INET, SOCK_STREAM, 0)) < 0)

         {

                   printf("socket failednr");

         }

 

         if(ioctl(fd, SIOCSIFVLAN_PVID_PRI, &data16) < 0)

         {

                   printf("ioctl pvid failednr");

         }

二、linux内核

1 sockios.h中定义

         #define SIOCSIFVLAN_PVID_PRI 0x8985 /* Set 802.1Q VLAN pvid */

2、在af_inet.c中添加:

         extern int VLAN1QEN(unsigned int ,void *arg);

         inet_ioctl()函数中添加

                   case SIOCSIFVLAN_PVID_PRI:

                            return VLAN1QEN(cmd, arg);

3、另外定义:

         static unsigned int VLAN_PVID_PRI = 0;

 

         int VLAN1QEN(unsigned int cmd,void *arg)

         {

                   unsigned int data;

                   if (copy_from_user(&data, arg, sizeof(int)))

                            return -EFAULT;

                   switch (cmd) {

                   case SIOCSIFVLAN_PVID_PRI:

                            VLAN_PVID_PRI = data;

                            break;

                   default:

                            return -EINVAL;

                   }

         }

From: http://soft.zdnet.com.cn/software_zone/2007/1023/574178.shtml

2009年2月23日星期一

vxworks下怎么改mac地址

关于动态修改VXWORKSMAC地址的问题!
由于我用的FREESCALECOLDFIRE MCF527X系列的芯片,他的MAC地址一般是放到FLASH的最末尾的一个扇区里的最后的部分!
如下图:
CPU: Motorola M5275AB. Processor #0.
Memory Size: 0x2008000. BSP version 1.2/0.
WDB Comm Type: WDB_COMM_END
WDB: Ready.
-> d 0xffffff00
ffffff00: 2c30 2974 723a 7678 776f 726b 7320 653d *,0)tr:vxworks e=*
ffffff10: 3139 322e 3136 382e 302e 3135 3520 683d *192.168.0.155 h=*
ffffff20: 3139 322e 3136 382e 302e 3337 2067 3d31 *192.168.0.37 g=1*
ffffff30: 3932 2e31 3638 2e30 2e32 2075 3d74 7220 *92.168.0.2 u=tr *
ffffff40: 7077 3d31 2074 6e3d 7472 206f 3d6d 6f74 *pw=1 tn=tr o=mot*
ffffff50: 6665 6331 00ff ffff ffff ffff ffff ffff *fec1............*
ffffff60: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffff70: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffff80: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffff90: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffffa0: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffffb0: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffffc0: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffffd0: ffff ffff ffff ffff ffff ffff ffff ffff *................*
ffffffe0: ffff ffff ffff ffff ffff ffff ffff ffff *................*
fffffff0: ffff ffff ffff ffff 00a0 1e52 7588 ff00 *...........Ru...*
value = 21 = 0x15
00a0 1e52 7588
就是MAC地址!
系统启动的时候,自己会从这LOAD MAC地址!
用的是以下的函数:
/*****************************************************************************
*
* sysFecEnetAddrGet - return an ethernet address for the board
*
* RETURNS: OK
*
* NOMANUAL
*/

STATUS sysFecEnetAddrGet
(
UINT32 motCpmAddr,
UCHAR * enetAddr
)
{
#ifndef ETHERNET_ADR_SET
memcpy(enetAddr, motFecEnetAddr, 6);
return(OK);
#else
int index;
char enetAddrTemp[6];
STATUS return_status;

return_status = sysEnetAddrGet( 0, (UINT8 *)enetAddrTemp);
/* swap bytes */
for ( index = 0; index < 6; index++)
{
enetAddr[index] = enetAddrTemp[5 - index];
}

#endif
}

#endif /* INCLUDE_END */

其实关键的是这个函数:sysEnetAddrGet
/*******************************************************************************
*
* sysEnetAddrGet - get the hardware Ethernet address
*
* This routine determines the unique Ethernet address for the CPU board and
* copies it to , such that the low-order byte is `addr[0]' and the
* high-order byte is `addr[5]'. The memory area pointed to by is
* six bytes.
*
* RETURNS: OK, or ERROR if the Ethernet address cannot be returned.
*/

STATUS sysEnetAddrGet
(
int unit,
UINT8 * addr
)
{
char bytes[7];

if (unit != 0)
return (ERROR);

/* read the variable address bytes */

sysNvRamGet (bytes, 6, ENET_NVRAM_OFFSET);

/* if the network address is not initialized, return ERROR */
if ( (bytes[0] == -1) && (bytes[1] == -1)
&& (bytes[2] == -1) && (bytes[3] == -1)
&& (bytes[4] == -1) && (bytes[5] == -1))
{
return (ERROR);
}

addr[5] = ((ENET_DEFAULT & 0x0000ff00) >> 8); /* High order */
addr[4] = ((ENET_DEFAULT & 0x00ff0000) >> 16);
addr[3] = ((ENET_DEFAULT & 0xff000000) >> 24);
addr[2] = bytes[3];
addr[1] = bytes[4];
addr[0] = bytes[5]; /* Low order */

return (OK);
}
这是获取MAC地址的函数:sysNvRamGet
STATUS sysNvRamGet
(
char *string, /* where to copy non-volatile RAM */
int strLen, /* maximum number of bytes to copy */
int offset /* byte offset into non-volatile RAM */
)

{
char *read_ptr;

if ((strLen < 0) || (offset < 0 )
|| ((offset + strLen) > NV_RAM_SIZE))
return (ERROR);

read_ptr = (char *)offset; /* boot line begins at = 0 */

while (strLen--)
{
*string = NV_RAM_READ (read_ptr);
string++, read_ptr++;
}
*string = EOS;

return (OK);
}


但是怎么设呢???
******************************************************************************
*
* sysEnetAddrSet - set the Ethernet address for this board
*
* This routine sets the variable portion of the Ethernet address, the first
* three bytes contain a fixed manufacturer's code, while the last 3 bytes are
* set locally, to generate a unique Ethernet address on the local network.
*
* RETURN: OK, always.
*
* NOMANUAL
*/

STATUS sysEnetAddrSet
(
char byte5, /* Ethernet address high order byte */
char byte4,
char byte3,
char byte2,
char byte1,
char byte0 /* Ethernet address low order byte */
)
{
char bytes[6];

/* Save six bytes in NVRAM */

bytes[0] = byte5; bytes[1] = byte4; bytes[2] = byte3;
bytes[3] = byte2; bytes[4] = byte1; bytes[5] = byte0;

sysNvRamSet (bytes, 6, ENET_NVRAM_OFFSET);

return (OK);
}
#endif /* ETHERNET_ADR_SET */
再者最核心的是调用:sysNvRamSet
/*******************************************************************************
*
* sysNvRamSet - write to non-volatile RAM
*
* This routine copies a specified string into non-volatile RAM.
*
* RETURNS: OK, or ERROR if access is outside the non-volatile RAM range.
*
* SEE ALSO: sysNvRamGet()
*/

STATUS sysNvRamSet
(
char *string, /* string to be copied into non-volatile RAM */
int strLen, /* maximum number of bytes to copy */
int offset /* byte offset into non-volatile RAM */
)

{
char *NvBuf, *srcBuf;
FLASH flash;
STATUS result;
int index, buint8s;
void * blocks[1];


if ((offset < 0)
|| (strLen < 0)
|| ((offset + strLen) > NV_RAM_SIZE))
return ERROR;

/* get a copy of the buffer
* first, define a buffer large enough for a whole flash block
* We use memory normally assigned to the booted image.
*/
NvBuf = (char *)0x1000;
blocks[0]=(void *)NvBuf;

/* copy the contents of NVRAM into the buffer */
srcBuf = (char *)PARAM_SECTOR_ADDRESS;
for ( index = 0; index < (PARAM_SEC_SIZE - NV_RAM_SIZE); index++)
{
NvBuf[index] = srcBuf[index];
}

result = sysNvRamGet
(
&NvBuf[PARAM_SEC_SIZE - NV_RAM_SIZE], /* where to copy */
NV_RAM_SIZE - 1, /* maximum number of bytes to copy */
0 /* byte offset into non-volatile RAM */
);

/* copy the new parameters into the buffer */
while (strLen--)
{
NvBuf[PARAM_SEC_SIZE - NV_RAM_SIZE + offset] = *string;
string++, offset++;
}

flash.blockptr=(void *)blocks;
flash.blocksz = PARAM_SEC_SIZE;
flash.sector=PARAM_SEC;
flash.numblocks=1;

buint8s = am29xxxx_write((AM29XXXX *)ROM_BASE_ADRS, &flash, NULL, NULL);

if (buint8s != PARAM_SEC_SIZE)
{
printf("Flash programming error: %d uint8s of %d written!\n",
buint8s, PARAM_SEC_SIZE);
}

/* verify data */
for ( index = 0; index < (PARAM_SEC_SIZE); index++)
{
if ( NvBuf[index] != srcBuf[index])
{
result = ERROR;
goto exit;
}
}

exit:
return result;
}

Press any key to stop auto-boot...
7
在启动的时候输入N就可以修改MAC地址,其实也是调用的sysNvRamSet函数;
[VxWorks Boot]: N
Current Ethernet Address is: 00:a0:1e:52:75:88
Modify only the last 3 bytes (board unique portion) of Ethernet Address.
The first 3 bytes are fixed at manufacturer's default address block.
00- 00
a0- a0
1e- 1e
52- 52
75- 75
88- 88

New Ethernet Address is: 00:a0:1e:52:75:88

我就想要是在 VXWORKS启动后自己也调用sysNvRamSet函数,不是就可以动态的修改MAC地址了么????
但试了以下,VXWORKS里调用sysNvRamSet函数,就会死机为什么呢??????
仔细研究了以下:sysNvRamSet函数里的东西发现:
char *NvBuf,
NvBuf = (char *)0x1000;
(char *)0x1000
是什么不就是VXWORKS的启动地址么???
Attached TCP/IP interface to motfec0.
0x1fa5b00 (tNetTask): duplicate IP address 192.168.0.155 sent from ethernet addr
ess 00:04:5a:44:8b:91 to target ethernet address 00:a0:1e:52:75:88
Warning: no netmask specified.
Attaching network interface lo0... done.
Loading... 845496 + 292816
Starting at 0x1000...
?????
怎么能这样定义:
原来问题在这里:

char *NvBuf,修改以下:
char NvBuf[64*1024], *srcBuf;/*NvBuf
的大小为最后一个扇区的大小多了也无所谓,小了可不行!*/
//NvBuf = (char *)0x1000;
这就不要了!这样就可以动态修改修改MAC地址了!但是要启动后VXWORKS才会去读新的MAC地址!
其实这sysNvRamSet还有好多的功能,就是往FLASH里写数,就完全当做NVRAM用了!不光修改MAC地址,具体的自己用吧!

sysNvRamSet(bytes, 6, ENET_NVRAM_OFFSET);只要把ENET_NVRAM_OFFSET这偏移量修改一下就可以了!
通过以下的函数读出来就可以:
/******************************************************************************
*
* sysNvRamGet - get the contents of non-volatile RAM
*
* This routine copies the contents of non-volatile memory into a specified
* string. The string is terminated with an EOS.
*
* RETURNS: OK, or ERROR if access is outside the non-volatile RAM range.
*
* SEE ALSO: sysNvRamSet()
*/

STATUS sysNvRamGet
(
char *string, /* where to copy non-volatile RAM */
int strLen, /* maximum number of bytes to copy */
int offset /* byte offset into non-volatile RAM */
)

{
char *read_ptr;

if ((strLen < 0) || (offset < 0 )
|| ((offset + strLen) > NV_RAM_SIZE))
return (ERROR);

read_ptr = (char *)offset; /* boot line begins at = 0 */

while (strLen--)
{
*string = NV_RAM_READ (read_ptr);
string++, read_ptr++;
}
*string = EOS;

return (OK);
}
以上的函数MCF527XBSP里就有的!只要你装了TORNADO2.2 for coldfire!
至于其他的平台大家自己参照吧!思路已经给出来了!

From: http://wenda.tianya.cn/wenda/thread?tid=1becad9302183473

局域网实现VLAN实例

     局域网实现VLAN实例计算机网络技术的发展犹如戏剧舞台,你方唱罢我登台。从传统的以太网(10Mb/s)发展到快速以太网(100Mb/s)和千兆以 太网(1000Mb/s)也不过几年的时间,其迅猛的势头实在令人吃惊。而现在中大型规模网络建设中,以千兆三层交换机为核心的所谓"千兆主干跑、百兆到 桌面"的主流网络模型已不胜枚举。 现在,网络业界对"三层交换"和VLAN这两词已经不感到陌生了。

 

一、什么是三层交换和VLAN要回答这个问题我们还是先看看以太网的工作原理。以太网的工作原理是利用二进制位形成的一个个字节组合成一帧帧的数据(其实是一些电脉冲)在导线中进行传播。

 

首 先,以太网网段上需要进行数据传送的节点对导线进行监听,这个过程称为CSMA/CDCarrier Sense Multiple Access with Collision Detection带有冲突监测的载波侦听多址访问)的载波侦听。如果,这时有另外的节点正在传送数据,监听节点将不得不等待,直到传送节点的传送任务结 束。如果某时恰好有两个工作站同时准备传送数据,以太网网段将发出"冲突"信号。这时,节点上所有的工作站都将检测到冲突信号,因为这时导线上的电压超出 了标准电压。这时以太网网段上的任何节点都要等冲突结束后才能够传送数据。也就是说在CSMA/CD方式下,在一个时间段,只有一个节点能够在导线上传送 数据。而转发以太网数据帧的联网设备是集线器,它是一层设备,传输效率比较低。冲突的产生降低了以太网的带宽,而且这种情况又是不可避免的。所以,当导线 上的节点越来越多后,冲突的数量将会增加。显而易见的解决方法是限制以太网导线上的节点,需要对网络进行物理分段。将网络进行物理分段的网络设备用到了网 桥与交换机。网桥和交换机的基本作用是只发送去往其他物理网段的信息。所以,如果所有的信息都只发往本地的物理网段,那么网桥和交换机上就没有信息通过。 这样可以有效减少网络上的冲突。网桥和交换机是基于目标MAC(介质访问控制)地址做出转发决定的,它们是二层设备。

 

我们已经知道了 以太网的缺点及物理网段中冲突的影响,现在,我们来看看另外一种导致网络降低运行速度的原因:广播。广播存在于所有的网络上,如果不对它们进行适当的控 制,它们便会充斥于整个网络,产生大量的网络通信。广播不仅消耗了带宽,而且也降低了用户工作站的处理效率。由于各种各样的原因,网络操作系统(NOS) 使用了广播,TCP/IP使用广播从IP地址中解析MAC地址,还使用广播通过RIPIGRP协议进行宣告,所以,广播也是不可避免的。网桥和交换机将 对所有的广播信息进行转发,而路由器不会。所以,为了对广播进行控制,就必须使用路由器。路由器是基于第3层报头、目标IP寻址、目标IPX寻址或目标 Appletalk寻址做出转发决定。路由器是3层设备。

 

在这里,我们就容易理解三层交换技术了,通俗地讲,就是将路由与交换合二为 一的技术。路由器在对第一个数据流进行路由后,将会产生一个MAC地址与IP地址的映射表,当同样的数据流再次通过时,将根据此映射表直接从二层进行交换 而不是再次路由,提供线速性能,从而消除了路由器进行路由选择而造成网络的延迟,提高了数据包转发的效率。采用此技术的交换机我们常称为三层交换机。

 

那 么,什么是VLAN呢?VLANVirtual Local Area Network)就是虚拟局域网的意思。VLAN可以不考虑用户的物理位置,而根据功能、应用等因素将用户从逻辑上划分为一个个功能相对独立的工作组,每 个用户主机都连接在一个支持VLAN的交换机端口上并属于一个VLAN。同一个VLAN中的成员都共享广播,形成一个广播域,而不同VLAN之间广播信息 是相互隔离的。这样,将整个网络分割成多个不同的广播域(VLAN)。一般来说,如果一个VLAN里面的工作站发送一个广播,那么这个VLAN里面所有的 工作站都接收到这个广播,但是交换机不会将广播发送至其他VLAN上的任何一个端口。如果要将广播发送到其它的VLAN端口,就要用到三层交换机。

 

二、如何配置三层交换机创建VLAN

 

以下的介绍都是基于Cisco交换机的VLANCiscoVLAN实现通常是以端口为中心的,与节点相连的端口将确定它所驻留的VLAN。将端口分配给VLAN的方式有两种,分别是静态的和动态的.

形成静态VLAN的过程是将端口强制性地分配给VLAN的过程。即我们先在VTP VLAN Trunking ProtocolServer上建立VLAN,然后将每个端口分配给相应的VLAN的过程。这是我们创建VLAN最常用的方法。

动 态VLAN形成很简单,由具体的机器决定自己属于哪个VLAN。即我们先建立一个VMPSVLAN Membership Policy ServerVLAN管理策略服务器,里面包含一个文本文件,文件中存有与VLAN映射的MAC地址表。交换机根据这个映射表决定将端口分配给何种 VLAN。这种方法有很大的优势,但创建数据库是一项非常艰苦而且非常繁琐的工作。

 

下面以实例说明如何在一个典型的快速以太局域网中实现VLAN

 

所 谓典型局域网就是指由一台具备三层交换功能的核心交换机接几台分支交换机(不一定具备三层交换能力)。我们假设核心交换机名称为:COM;分支交换机分别 为:PAR1PAR2PAR3,分别通过Port 1的光线模块与核心交换机相连;并且假设VLAN名称分别为COUNTERMARKETMANAGING……

 

需要做的工作:

1、设置VTP DOMAIN(核心、分支交换机上都设置)

2、配置中继(核心、分支交换机上都设置)

3、创建VLAN(在server上设置)

4、将交换机端口划入VLAN

5、配置三层交换

 

 

1、设置VTP DOMAIN VTP DOMAIN 称为管理域。

 

交换VTP更新信息的所有交换机必须配置为相同的管理域。如果所有的交换机都以中继线相连,那么只要在核心交换机上设置一个管理域,网络上所有的交换机都加入该域,这样管理域里所有的交换机就能够了解彼此的VLAN列表。

 

COM#vlan database 进入VLAN配置模式

COM(vlan)#vtp domain COM 设置VTP管理域名称 COM

COM(vlan)#vtp server 设置交换机为服务器模式

 

PAR1#vlan database 进入VLAN配置模式

PAR1(vlan)#vtp domain COM 设置VTP管理域名称COM

PAR1(vlan)#vtp Client 设置交换机为客户端模式

 

PAR2#vlan database 进入VLAN配置模式

PAR2(vlan)#vtp domain COM 设置VTP管理域名称COM

PAR2(vlan)#vtp Client 设置交换机为客户端模式

 

PAR3#vlan database 进入VLAN配置模式

PAR3(vlan)#vtp domain COM 设置VTP管理域名称COM

PAR3(vlan)#vtp Client 设置交换机为客户端模式

 

注 意:这里设置核心交换机为Server模式是指允许在该交换机上创建、修改、删除VLAN及其他一些对整个VTP域的配置参数,同步本VTP域中其他交换 机传递来的最新的VLAN信息;Client模式是指本交换机不能创建、删除、修改VLAN配置,也不能在NVRAM中存储VLAN配置,但可同步由本 VTP域中其他交换机传递来的VLAN信息。

 

2、配置中继为了保证管理域能够覆盖所有的分支交换机,必须配置中继。

 

Cisco 交换机能够支持任何介质作为中继线,为了实现中继可使用其特有的ISL标签。ISLInterSwitch Link)是一个在交换机之间、交换机与路由器之间及交换机与服务器之间传递多个VLAN信息及VLAN数据流的协议,通过在交换机直接相连的端口配置 ISL封装,即可跨越交换机进行整个网络的VLAN分配和进行配置。

 

在核心交换机端配置如下:

 

COM(config)#interface gigabitEthernet 2/1

COM(config-if)#switchport

COM(config-if)#switchport trunk encapsulation isl 配置中继协议

COM(config-if)#switchport mode trunk

 

COM(config)#interface gigabitEthernet 2/2

COM(config-if)#switchport

COM(config-if)#switchport trunk encapsulation isl 配置中继协议

COM(config-if)#switchport mode trunk

 

COM(config)#interface gigabitEthernet 2/3

COM(config-if)#switchport

COM(config-if)#switchport trunk encapsulation isl 配置中继协议

COM(config-if)#switchport mode trunk

 

在分支交换机端配置如下:

 

PAR1(config)#interface gigabitEthernet 0/1

PAR1(config-if)#switchport mode trunk

 

PAR2(config)#interface gigabitEthernet 0/1

PAR2(config-if)#switchport mode trunk

 

PAR3(config)#interface gigabitEthernet 0/1

PAR3(config-if)#switchport mode trunk

 

……

 

此时,管理域算是设置完毕了。

 

 

3、创建VLAN一旦建立了管理域,就可以创建VLAN了。

 

COM(vlan)#Vlan 10 name COUNTER 创建了一个编号为10 名字为COUNTER VLAN

COM(vlan)#Vlan 11 name MARKET 创建了一个编号为11 名字为MARKET VLAN

COM(vlan)#Vlan 12 name MANAGING 创建了一个编号为12 名字为MANAGING VLAN

 

……

 

注 意,这里的VLAN是在核心交换机上建立的,其实,只要是在管理域中的任何一台VTP 属性为Server的交换机上建立VLAN,它就会通过VTP通告整个管理域中的所有的交换机。但如果要将具体的交换机端口划入某个VLAN,就必须在该 端口所属的交换机上进行设置。

 

 

4、将交换机端口划入VLAN

 

例如,要将PAR1PAR2PAR3……分支交换机的端口1划入COUNTER VLAN,端口2划入MARKET VLAN,端口3划入MANAGING VLAN……

 

PAR1(config)#interface fastEthernet 0/1 配置端口1

PAR1(config-if)#switchport access vlan 10 归属COUNTER VLAN

 

PAR1(config)#interface fastEthernet 0/2 配置端口2

PAR1(config-if)#switchport access vlan 11 归属MARKET VLAN

 

PAR1(config)#interface fastEthernet 0/3 配置端口3

PAR1(config-if)#switchport access vlan 12 归属MANAGING VLAN

 

 

PAR2(config)#interface fastEthernet 0/1 配置端口1

PAR2(config-if)#switchport access vlan 10 归属COUNTER VLAN

 

PAR2(config)#interface fastEthernet 0/2 配置端口2

PAR2(config-if)#switchport access vlan 11 归属MARKET VLAN

 

PAR2(config)#interface fastEthernet 0/3 配置端口3

PAR2(config-if)#switchport access vlan 12 归属MANAGING VLAN

 

 

PAR3(config)#interface fastEthernet 0/1 配置端口1

PAR3(config-if)#switchport access vlan 10 归属COUNTER VLAN

 

PAR3(config)#interface fastEthernet 0/2 配置端口2

PAR3(config-if)#switchport access vlan 11 归属MARKET VLAN

 

PAR3(config)#interface fastEthernet 0/3 配置端口3

PAR3(config-if)#switchport access vlan 12 归属MANAGING VLAN

 

……

 

 

5、配置三层交换

 

到 这里,VLAN已经基本划分完毕。但是,VLAN间如何实现三层(网络层)交换呢?这时就要给各VLAN分配网络(IP)地址了。给VLAN分配IP地址 分两种情况,其一,给VLAN所有的节点分配静态IP地址;其二,给VLAN所有的节点分配动态IP地址。下面就这两种情况分别介绍。

 

假设给VLAN COUNTER分配的接口Ip地址为172.16.58.1/24,网络地址为:172.16.58.0

VLAN MARKET 分配的接口Ip地址为172.16.59.1/24,网络地址为:172.16.59.0

VLAN MANAGING分配接口Ip地址为172.16.60.1/24, 网络地址为172.16.60.0

……

如果动态分配IP地址,则设网络上的DHCP服务器IP地址为172.16.1.11

 

(1)VLAN所有的节点分配静态IP地址。

 

首先在核心交换机上分别设置各VLAN的接口IP地址。核心交换机将vlan做为一种接口对待,就象路由器上的一样,如下所示:

 

COM(config)#interface vlan 10

COM(config-if)#ip address 172.16.58.1 255.255.255.0 VLAN10接口IP

 

COM(config)#interface vlan 11

COM(config-if)#ip address 172.16.59.1 255.255.255.0 VLAN11接口IP

 

COM(config)#interface vlan 12

COM(config-if)#ip address 172.16.60.1 255.255.255.0 VLAN12接口IP

 

……

 

再在各接入VLAN的计算机上设置与所属VLAN的网络地址一致的IP地址,并且把默认网关设置为该VLAN的接口地址。这样,所有的VLAN也可以互访了。

 

(2)VLAN所有的节点分配动态IP地址。

 

首先在核心交换机上分别设置各VLAN的接口IP地址和同样的DHCP服务器的IP地址,如下所示:

 

COM(config)#interface vlan 10

COM(config-if)#ip address 172.16.58.1 255.255.255.0 VLAN10接口IP

COM(config-if)#ip helper-address 172.16.1.11 DHCP Server IP

 

COM(config)#interface vlan 11

COM(config-if)#ip address 172.16.59.1 255.255.255.0 VLAN11接口IP

COM(config-if)#ip helper-address 172.16.1.11 DHCP Server IP

 

COM(config)#interface vlan 12

COM(config-if)#ip address 172.16.60.1 255.255.255.0 VLAN12接口IP

COM(config-if)#ip helper-address 172.16.1.11 DHCP Server IP

 

……

 

再在DHCP服务器上设置网络地址分别为172.16.58.0172.16.59.0172.16.60.0的作用域,并将这些作用域的"路由器"选项设置为对应VLAN的接口IP地址。这样,可以保证所有的VLAN也可以互访了。

 

最后在各接入VLAN的计算机进行网络设置,将IP地址选项设置为自动获得IP地址即可。

 

 

三、总结

 

本文是笔者在实际工作中的一些总结。笔者力图用通俗易懂的文字来阐述创建VLAN的全过程。并且给出了详细的设置步骤,只要你对Cisco交换机的IOS有所了解,看懂本文并不难。按照本文所示的步骤一步一步地做,你完全可以给一个典型的快速以太网络建立多个VLAN

From: http://sje.cn/S_Html/38/12/23/7971.html