Linux内核协议栈(11)路由系统

来源:互联网 发布:数据的收集与整理 编辑:程序博客网 时间:2024/06/06 14:09
/**查询路由表**rp:路由表**dst:目的地址**src:源地址**tos:**oif:**protocol:协议*/static inline int ip_route_connect(struct rtable **rp, __be32 dst,   __be32 src, u32 tos, int oif, u8 protocol,   __be16 sport, __be16 dport, struct sock *sk,   int flags){struct flowi fl = { .oif = oif,    .mark = sk->sk_mark,    .nl_u = { .ip4_u = { .daddr = dst, .saddr = src, .tos   = tos } },    .proto = protocol,    .uli_u = { .ports =       { .sport = sport, .dport = dport } } };int err;struct net *net = sock_net(sk);if (inet_sk(sk)->transparent)fl.flags |= FLOWI_FLAG_ANYSRC;if (!dst || !src) {err = __ip_route_output_key(net, rp, &fl);if (err)return err;fl.fl4_dst = (*rp)->rt_dst;fl.fl4_src = (*rp)->rt_src;ip_rt_put(*rp);*rp = NULL;}security_sk_classify_flow(sk, &fl);return ip_route_output_flow(net, rp, &fl, sk, flags);}

0 0
原创粉丝点击