标题: netlink求救!
liwang820716
新生入学
Rank: 1
注册用户



UID 174936
精华 0
积分 0(积分有什么用?)
帖子 2
阅读权限 10
注册 2006-11-28
状态 离线
发表于 2007-4-26 16:52  资料  个人空间  短消息  加为好友 
netlink求救!

用netlink读取内核路由表并显示出来的时候,读到的metric的值总是为零,不知道为什么,请各位大侠指点。具体的函数片断如下:
A%h4rP0qcm:yWLinux伊甸园论坛+Y(b8rl)JqQ!Ik)RR
struct route* get_route(struct nlmsghdr *nlmsghdr)&uP'?N%E0J
{
-B7H[4Y\wJwww.linuxeden.com        struct rtattr *rta; C/o?C-Tm        a"|'s
        int len;)p`;~k*F A

%G)rbWz(h@Q[2m        struct route *route;Linux伊甸园论坛J~OH9o
        if ((route = malloc(sizeof(struct route))) == NULL)
G+ns0Ob6i%G        {
6C5}.[fO;ob\#ifdef DEBUG_NETLINK
C1I/y#f-Z$e                perror("Insufficient memory allocating route error!";8W-S3_f
i3F
@

#endif)Z,?}2Q.|6HU(\ t A
                return NULL;
\py,[5m4\W        }!K K}c        U8r2tA
        
4j%t_O!u4V+h`{www.linuxeden.com        memset(route, 0, sizeof(struct route));
5t&Oq7s$R
SMG2U[g?!lp        len = nlmsghdr->nlmsg_len - NLMSG_LENGTH(sizeof(struct rtmsg));3T"k'i,k uN(p%N

N`~vv%|vc,oLinux伊甸园论坛        /** NLMSG_DATA(nlmsghdr) return the rtmsg pointer following, and RTM_RTA return
"cSu0z
]/n@)[
                the rtattr pointer following the rtmsg.        **/
Pe ^wq        rta = RTM_RTA(NLMSG_DATA(nlmsghdr));
$B#f2C@_4k1Oa5J        while (RTA_OK(rta, len))
C]        _:ZC#LP~l H        {               
;~(]d/T-Qwww.linuxeden.com                if (rta->rta_type >= RTA_MAX)7e-xN,zhp"L/b
                {www.linuxeden.comV0sc%vVW
Y1W

                        break;
%yN
p*s!_&{6G'[.m8o4a{Linux伊甸园论坛
                }
9Pl#C[.L/urwww.linuxeden.com
"U$e
`KAw+mRv`Linux伊甸园论坛
                /** get the dst address **/
.y$x0`/t!e? zCv3RLinux伊甸园论坛                if(rta->rta_type == RTA_DST)
rr7`9Ek/UELinux伊甸园论坛                {
-m/t(M-Lf_*cLinux伊甸园论坛                        route->dst = *(struct in_addr *)(RTA_DATA(rta));
8YJ]q5G4l7OE"v                }
C-SI;S
q`q)O;L(V
                Linux伊甸园论坛o$qo8b
`&cGf

                /** get the nexthop address **/N$v        s5zj
                if(rta->rta_type == RTA_GATEWAY)www.linuxeden.com?1O?,k$^N
                {
[I(lM
{5JV
                        route->nexthop = *(struct in_addr *)(RTA_DATA(rta));
jN
_;@)Nk
                }Linux伊甸园论坛(e5M_)Hw&Q!l
               
[~1s?7A(fTE.}                /** get the metric **/
b|-^_-D*\4U
N]Linux伊甸园论坛
                if(rta->rta_type == RTA_METRICS)
i$`c!}w*a{8WPLinux伊甸园论坛                {
R!dOul6P+Rwww.linuxeden.com                        route->metric = *(int *)RTA_DATA(rta);Linux伊甸园论坛9{        \N0[ D[)](y.P pw
                }
,J3`7~ {v_2l`} `c Fs'DT3rc
                rta = RTA_NEXT(rta, len);
wS
Xi)[5dr

+O_;Q;N(v:{8WN6? f~)ALinux伊甸园论坛        }
R
u`8|(zhpJ7i
        return route;]}+CpB
]2C

}/~/E9Qq2i@6OPy(U

R|f[y        R-y

小弟感激不尽!

顶部
不容错过的IBM 集群技术资源汇总
flag
版主
Rank: 7Rank: 7Rank: 7
版主



UID 19801
精华 1
积分 28(积分有什么用?)
帖子 5581
阅读权限 100
注册 2002-7-19
状态 离线
发表于 2007-4-30 10:49  资料  个人空间  短消息  加为好友 
不知道你要干什么,用NETLINK不是要建SOCKET然后发包吗?





上帝说,有问题,找GOOGLE 写程序是很神圣的事情!同样只是装系统,卖菜的大娘会的事情不见得就跟卖菜一样了。
顶部
 



当前时区 GMT+8, 现在时间是 2008-5-17 05:07

    Powered by Discuz! 5.5.0  © 2001-2007 Comsenz Inc.
Processed in 0.053982 second(s), 5 queries

清除 Cookies - 联系我们 - Linux伊甸园 - Archiver - WAP