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



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

用netlink读取内核路由表并显示出来的时候,读到的metric的值总是为零,不知道为什么,请各位大侠指点。具体的函数片断如下:Linux伊甸园论坛X7C+d/V4^+F/?;f*L'B1si

NZ\ P:H(z8S"t|struct route* get_route(struct nlmsghdr *nlmsghdr)av!A!sG
{
T*L1_&ULKL.O        struct rtattr *rta;
SqTyyP2W]5e        int len;!I qb!d~(BQ3oW(m8@
www.linuxeden.com
sC8S$xbQp!Q+X)v

        struct route *route;
w ~zO"c7P,[e        if ((route = malloc(sizeof(struct route))) == NULL)
sJfg/hLinux伊甸园论坛        {
#_        mb.R7K
]G9P
#ifdef DEBUG_NETLINK
b{1^Wb2O                perror("Insufficient memory allocating route error!";F9i!{}Im,t/Wl
#endif
6Z[9J+_*o)]%{UQzwww.linuxeden.com                return NULL;
-O        U#{#w2W2_v&\Linux伊甸园论坛        }
/]W e1FIi3{"K4YLinux伊甸园论坛        www.linuxeden.com)EGB Y&Qhc
        memset(route, 0, sizeof(struct route));3N y'c)dZ

uu"A9kQ        t;G

        len = nlmsghdr->nlmsg_len - NLMSG_LENGTH(sizeof(struct rtmsg));

urvM X1[6J Y6{Ck'X

(uS|w.Y0LC        /** NLMSG_DATA(nlmsghdr) return the rtmsg pointer following, and RTM_RTA return /|x)P(nK*~        T
                the rtattr pointer following the rtmsg.        **/z
Q zg$|$X b

        rta = RTM_RTA(NLMSG_DATA(nlmsghdr));www.linuxeden.com'ZfX1PO{,sur9W
        while (RTA_OK(rta, len)) 9~g;vr
f-n

        {                www.linuxeden.com)d
qF+Y}G,UnFp

                if (rta->rta_type >= RTA_MAX)Linux伊甸园论坛$R2R"S9w;|nR
                {
-{:p,t!]&H#o0sx4E                        break;
eGI"z J`J~c                }
#m/_uL1{8bt        fwww.linuxeden.com
l @/ni,Leq
aN

                /** get the dst address **/-xvP8H8kb
                if(rta->rta_type == RTA_DST)
UH \H/c[*V                {
8AX\J'\9Jh
m*PLinux伊甸园论坛
                        route->dst = *(struct in_addr *)(RTA_DATA(rta));
8m(tA2Y$v1m\Linux伊甸园论坛                }
zp w0b'NkLinux伊甸园论坛                $@.t,m{)v;u%\y
                /** get the nexthop address **/www.linuxeden.com\K9q'DMN1nx uC
                if(rta->rta_type == RTA_GATEWAY)
'A*Yr O*n
`(uw.\
                {
Elw1r2O Y x?h.j                        route->nexthop = *(struct in_addr *)(RTA_DATA(rta));(CgGHr(}
                }r+A(I]-k*@
               

j8k` T*g'G _
                /** get the metric **/www.linuxeden.com?XD2@^
wc        H$j:G

                if(rta->rta_type == RTA_METRICS);M4^5Pm6z#V5h`2|D
                {1]{ u@T;S(y
                        route->metric = *(int *)RTA_DATA(rta);
5}#PvZ+e C6odz                }-s6r"uh9D!U4P^%}

DI9o"q9B&MVg                rta = RTA_NEXT(rta, len);
.xh5~o.H
R/l4HTfu`        }hQ&j4bq9q#W
k

        return route;2O2ep}` @!g        }
}
b!E*p;?*L        Yo3nLinux伊甸园论坛
xy
z lG-t!CVZ
小弟感激不尽!

顶部
不容错过的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 04:49

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

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