用netlink读取内核路由表并显示出来的时候,读到的metric的值总是为零,不知道为什么,请各位大侠指点。具体的函数片断如下:
A%h4rP0qcm:yWLinux伊甸园论坛+Y(b8rl)JqQ!Ik)R R
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(\tA
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~lH {
;~(]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/u rwww.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.Ppw
}
,J3`7~{v_2l`}`cFs'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@6O Py(U
R|f[y R-y
小弟感激不尽!