• LLDPD协议验证过程记录


    背景介绍:

    最近因工作需要对lldp进行验证,以确认我们的系统是否支持lldp协议。lldp协议全称为链路层发现协议(Link Layer Discovery Protocol),

    在baidu、bing以及aol后发现介绍协议本身的博客内容较多,但真正介绍如何验证的可谓是凤毛麟角。

    为了不让将近1周的汗水白流,特把这次验证过程记录下来写成如下这篇博文。

    验证前准备:

    通过搜索发现有网上目前有两种支持lldp的开源软件,一种叫open-lldp,另一种叫lldpd。经过查证分析,open-lldp较长时间没有再更新且不完全支持lldp,

    因此决定采用另外一种,即:lldpd来进行验证。我使用的版本为:lldpd-0.7.19.tar.gz,如果下载可以在网上搜一下可以找到,另外这个地址对如何安装进行了介绍,

    是我在验证过程中很重要的一份参考资料地址为:http://vincentbernat.github.io/lldpd/usage.html#lldpd8。

    需要的软件已经找到了,验证环境呢?环境使用部门常用的arm单板,看PCB上面的丝印是IMX6S,飞思卡尔的单板。

    单板上OS已经配置好,主要需要把lldpd进行交叉编译后安装到单板上然后启动运行。

    用到的工具有网口,串口。其中串口是USB转的串口。

    验证过程:

    交叉编译的过程很费劲,这里耗的时间将近50%。主要是我对单板上的c库和我使用的工具链自带的库不够了解。

    原来单板自带的buildroot环境中由于缺乏相关的库,导致没办法直接使用自带的工具链进行编译运行,于是不得不退而求其次,

    使用另外一种也是部门常用的工具链进行编译。但是编译解决了,问题也随之而来。

    什么问题呢?主要就是实际编译出的可执行程序需要的.so文件在单板环境上找不到,导致目标程序无法运行。

    这里顺便介绍一下在嵌入式环境下如何解决使用源代码安装的问题。在PC/服务器上,我们安装开源软件的方法真的很简单,按照三部曲进行即可。

    ./configure
    make
    make install

    然而在嵌入式环境下,编译器就不能直接使用PC/服务器自带的GCC,否则生成的目标文件还是x86的文件,这样把可执行文件下载到单板上后就会无法运行。那如何解决呢?

    我一开始也没想到解决的办法,在上了N次度娘和实操后,发现了一种可行的办法。

    ./configure --host=xxx --prefix=yyy               ;xxx是编译器的前缀,比如用的交叉编译工具是arm-linux-gcc,那么host就是arm-linux
                                                                     ;yyy是安装到的路径,默认好像是/usr/local/
    make

    make install

    然后将yyy目录拷贝到目标单板环境上。这里要注意一点:虽然指定了host可能找不到,这种情况下需要在环境变量中指定一下路径,环境变量为LD_LIBRARY_PATH

    解决了编译问题,现在验证能否正常运行。

    这里有个小技巧,可以先编译一个小程序验证一下库是否支持,能否运行。内容随便,比如helloworld

    通常不会是一下子就支持的,至少需要对应的ld-linux.so.3和libc.so.6,这两个ok的话,helloworld应该是可以正常运行的。

    但是如果想要整个应用程序可以运行的话,那还得需要很多库,这里我也没有好办法,采用的笨办法是把交叉编译器里面的库全部拷过来,然后指定好环境变量。

    虽然ldd工具有时候可以告诉我们运行程序要哪些.so,但是有的情况下ldd也报不了。

    闲话说了一堆,现在步入正题,如何把lldpd跑起来。

    在前面解决了交叉编译和运行所需要的库的前提下,现在就可以运行lldpd程序了,lldpd有2个部分,一个是daemon即lldpd,一个是客户端工具lldpcli

    运行之前我们必须要先添加_lldpd用户和组,否则不能正常运行。

    然后使用ifconfig查询单板环境的eth端口,比如需要通过eth0查看对端信息,那么就如下操作

    ./lldpd -i eth0         ; -i指定端口

    ./lldpcli                  ; 打开客户端

    打开客户端后会进入客户端提示符,在该提示符下输入

    show neighbors ports eth0

    如果对端支持并且也打开了lldpd,那么就会看到对端返回的信息,否则返回错误提示或者为空

    同样的道理,我们在对端单板上也按上面的操作就能看到对端的对端(也就是本端单板)返回的信息

    信息就是下面的样子。

    [lldpcli] # show neighbors ports eth0
    -------------------------------------------------------------------------------
    LLDP neighbors:
    -------------------------------------------------------------------------------
    Interface: eth0, via: LLDP, RID: 1, Time: 0 day, 00:00:11
    Chassis:
    ChassisID: mac 00:04:9f:03:53:1e
    SysName: bw
    SysDescr: Buildroot 2015.08.1 Linux 3.10.55-XXXX-5.01.20.P0 #2 SMP PREEMPT RT Thu Apr 23 08:53:38 CST 2015 armv7l
    MgmtIP: 192.168.1.100
    MgmtIP: fe80::204:9fff:fe03:531e
    Capability: Bridge, off
    Capability: Router, off
    Capability: Wlan, off
    Capability: Station, on
    Port:
    PortID: mac 00:04:9f:03:53:1e
    PortDescr: eth0
    -------------------------------------------------------------------------------

    验证总结:

    这里主要简单记录了一下验证的过程和要注意的问题。比如如何更好更快的解决交叉编译和库的问题,还需要再思考,有了结果再补充上来。如果大家有好的方法也请回复告诉我一下。

  • 相关阅读:
    python2将str类型与unicode类型字符串写入文件的编码问题
    正则表达式匹配邮箱
    python读取excel表格
    python正则匹配re.search与re.findall的区别
    python使用join提取列表类型中的数字字符串
    判断一个python字符串中是否包含中文字符
    wordstation中虚拟机关机hang住,无法正常关机
    网络中涉及到优先级的主设备会被抢占与非抢占。
    [转]一天一点学习Linux之Inode详解
    [转]理解Linux文件系统之inode(非ext格式)
  • 原文地址:https://www.cnblogs.com/sstudy-linux/p/4898065.html
Copyright © 2020-2023  润新知