Chinaunix首页 | 论坛 | 博客
  • 博客访问: 148581
  • 博文数量: 34
  • 博客积分: 1270
  • 博客等级: 中尉
  • 技术积分: 269
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-06 10:49
文章分类
文章存档

2011年(12)

2010年(22)

我的朋友

分类: LINUX

2010-11-17 09:44:50

桥设备透传802.1x报文
       eap报文           eap报文              radius报文
客户端----------->桥设备------------->认证者-------------->认证服务器
(Supplicant)                  (Authenticator)       (Authentication Server)

分析:
1、802.1x认证流程中,第一个报文(EAPOL start)的目的mac为01:80:c2:00:00:03。在linux中的桥代码处理中,将会把此目的mac的报文截断,交给本机处理。
详细代码如下:
int br_handle_frame(struct net_bridge_port *p, struct sk_buff **pskb)
{
    struct sk_buff *skb = *pskb;
    const unsigned char *dest = eth_hdr(skb)->h_dest;
    ...
    if (unlikely(is_link_local(dest))) {                       /* 8021x的eapol start报文此处为真 */
        skb->pkt_type = PACKET_HOST;
        return NF_HOOK(PF_BRIDGE, NF_BR_LOCAL_IN, skb, skb->dev,
                           NULL, br_handle_local_finish) != 0;
    }
    ....
}
因此需要在桥设备中将is_link_local为真的报文透传出去,且需要能进行控制。
解决办法:能对来自指定端口的此类报文透传到指定mac地址。

1、设计用户空间命令行,指定参数端口号和目的mac
# brctl set8021x 端口号  目的mac /*设置*/
# brctl unset8021x 端口号  /*取消*/
a、ioctl(br_socket_fd, SIOCSIFBR, args) /* 用户空间 自定义函数 */
          |
          |
          ∨
b、sock_ioctl   /* 内核空间 */
          |
          |
          ∨
c、br_ioctl_hook(br_ioctl_deviceless_stub)
          |
          |
          ∨
d、old_deviceless
          |
          |
          ∨
e、具体的处理函数(在对应的net_bridge_port 结构中设置标志位,存储目的mac)
 
 
2、修改br_handle_frame,对符合条件的报文,修改其目的mac,透传
阅读(2885) | 评论(1) | 转发(0) |
给主人留下些什么吧!~~

chinaunix网友2010-11-17 16:49:18

很好的, 收藏了 推荐一个博客,提供很多免费软件编程电子书下载: http://free-ebooks.appspot.com