colon = strchr(devname, ':');
if (colon)
*colon = 0;
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog info] ip_rt_ioctl rt.dev =%s \n",devname);
+ #endif
dev = __dev_get_by_name(net, devname);
if (!dev)
return -ENODEV;
if (copy_from_user(&rt, arg, sizeof(rt)))
return -EFAULT;
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog info]ip_rt_ioctl rt.flags =%08x, rt.rt_dst =%08x rt.rt_gateway =%08x \n",rt.rt_flags,sk_extract_addr(&(rt.rt_dst)),sk_extract_addr(&(rt.rt_gateway)));
+ #endif
rtnl_lock();
err = rtentry_to_fib_config(net, cmd, &rt, &cfg);
struct fib_table *tb;
if (cmd == SIOCDELRT) {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog delete] p_rt_ioctl: cmd == SIOCDELRT! >>\n");
+ #endif
tb = fib_get_table(net, cfg.fc_table);
if (tb)
err = fib_table_delete(tb, &cfg);
else
err = -ESRCH;
} else {
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog insert] p_rt_ioctl: cmd == SIOCADDRT! >>\n");
+ #endif
tb = fib_new_table(net, cfg.fc_table);
if (tb)
err = fib_table_insert(tb, &cfg);
[RTA_METRICS] = { .type = NLA_NESTED },
[RTA_MULTIPATH] = { .len = sizeof(struct rtnexthop) },
[RTA_FLOW] = { .type = NLA_U32 },
+ [RTA_UID] = { .type = NLA_U32 },
};
static int rtm_to_fib_config(struct net *net, struct sk_buff *skb,
struct fib_config cfg;
struct fib_table *tb;
int err;
-
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog delete] inet_rtm_delroute !\n");
+ #endif
err = rtm_to_fib_config(net, skb, nlh, &cfg);
if (err < 0)
goto errout;
-
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog info] inet_rtm_delroute cfg.fc_dst =%08x, cfg.fc_gw =%08x\n",cfg.fc_dst,cfg.fc_gw);
+ #endif
tb = fib_get_table(net, cfg.fc_table);
if (tb == NULL) {
err = -ESRCH;
struct fib_config cfg;
struct fib_table *tb;
int err;
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog insert] inet_rtm_newroute !\n");
+ #endif
err = rtm_to_fib_config(net, skb, nlh, &cfg);
if (err < 0)
goto errout;
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog info] inet_rtm_newroute cfg.fc_dst =%08x,cfg.fc_gw =%08x \n",cfg.fc_dst,cfg.fc_gw);
+ #endif
tb = fib_new_table(net, cfg.fc_table);
if (tb == NULL) {
if (!ipv4_is_zeronet(prefix) && !(ifa->ifa_flags & IFA_F_SECONDARY) &&
(prefix != addr || ifa->ifa_prefixlen < 32)) {
+ /* MTK_NET_CHANGES */
+ if(0 == strncmp(dev->name, "ccmni", 2)){
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog] ignore ccmni subnet route\n");
+ #endif
+ } else {
fib_magic(RTM_NEWROUTE,
dev->flags & IFF_LOOPBACK ? RTN_LOCAL : RTN_UNICAST,
prefix, ifa->ifa_prefixlen, prim);
-
+ }
/* Add network specific broadcasts, when it takes a sense */
if (ifa->ifa_prefixlen < 31) {
fib_magic(RTM_NEWROUTE, RTN_BROADCAST, prefix, 32, prim);
switch (event) {
case NETDEV_UP:
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog insert] fib_inetaddr_event() %s NETDEV_UP!\n", ifa->ifa_dev->dev->name);
+ #endif
fib_add_ifaddr(ifa);
#ifdef CONFIG_IP_ROUTE_MULTIPATH
fib_sync_up(dev);
rt_cache_flush(dev_net(dev));
break;
case NETDEV_DOWN:
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog delete] fib_inetaddr_event() %s NETDEV_DOWN!\n", ifa->ifa_dev->dev->name);
+ #endif
fib_del_ifaddr(ifa, NULL);
atomic_inc(&net->ipv4.dev_addr_genid);
if (ifa->ifa_dev->ifa_list == NULL) {
switch (event) {
case NETDEV_UP:
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog insert] fib_netdev_event() %s NETDEV_UP!\n", dev->name);
+ #endif
for_ifa(in_dev) {
fib_add_ifaddr(ifa);
} endfor_ifa(in_dev);
rt_cache_flush(net);
break;
case NETDEV_DOWN:
+ #ifdef CONFIG_MTK_NET_LOGGING
+ printk(KERN_INFO "[mtk_net][RTlog delete] fib_netdev_event() %s NETDEV_DOWN!\n", dev->name);
+ #endif
fib_disable_ip(dev, 0);
break;
case NETDEV_CHANGEMTU: