--- zzzz-none-000/linux-4.9.279/net/ipv6/ip6mr.c 2021-08-08 06:38:54.000000000 +0000 +++ puma7-atom-6591-750/linux-4.9.279/net/ipv6/ip6mr.c 2023-02-08 11:43:43.000000000 +0000 @@ -123,6 +123,11 @@ static void mroute_clean_tables(struct mr6_table *mrt, bool all); static void ipmr_expire_process(unsigned long arg); +#if IS_ENABLED(CONFIG_LANTIQ_MCAST_HELPER) +void (*five_tuple_info6_ptr)(struct sk_buff *skb, char iface_name[20]) = NULL; +EXPORT_SYMBOL(five_tuple_info6_ptr); +#endif + #ifdef CONFIG_IPV6_MROUTE_MULTIPLE_TABLES #define ip6mr_for_each_table(mrt, net) \ list_for_each_entry_rcu(mrt, &net->ipv6.mr6_tables, list) @@ -169,6 +174,8 @@ return -ENETUNREACH; case FR_ACT_PROHIBIT: return -EACCES; + case FR_ACT_POLICY_FAILED: + return -EPERM; case FR_ACT_BLACKHOLE: default: return -EINVAL; @@ -1178,6 +1185,12 @@ } else #endif { +#if IS_ENABLED(CONFIG_LANTIQ_MCAST_HELPER) + /* Send five tuple info to mcast helper */ + if(ipv6_hdr(pkt)->nexthdr == 17) + if(five_tuple_info6_ptr != NULL) + five_tuple_info6_ptr(pkt, mrt->vif6_table[mifi].dev->name); +#endif /* * Copy the IP header */ @@ -1214,7 +1227,6 @@ */ ret = sock_queue_rcv_skb(mrt->mroute6_sk, skb); if (ret < 0) { - net_warn_ratelimited("mroute6: pending queue full, dropping entries\n"); kfree_skb(skb); }