diff --git a/wlan/rmnet_wlan_connection.c b/wlan/rmnet_wlan_connection.c index 8147fad343..945e6a0ddb 100644 --- a/wlan/rmnet_wlan_connection.c +++ b/wlan/rmnet_wlan_connection.c @@ -1,5 +1,6 @@ // SPDX-License-Identifier: GPL-2.0-only /* Copyright (c) 2021, The Linux Foundation. All rights reserved. + * Copyright (c) 2022 Qualcomm Innovation Center, Inc. All rights reserved. * * RMNET WLAN connection management framework * @@ -60,20 +61,22 @@ DATARMNET813ca18d06){DATARMNET17f6bc1be5(DATARMNETfa4b3dd44a);goto DATARMNETc1174a0f45;}DATARMNET543491eb0f->dev=DATARMNET813ca18d06;memcpy(& DATARMNET099aa93adc.saddr,&DATARMNET86f1f2cdc9->saddr,sizeof(__be32));memcpy(& DATARMNET099aa93adc.daddr,&DATARMNET86f1f2cdc9->daddr,sizeof(__be32)); -DATARMNET066b8bd537=ip_route_output_key(&init_net,&DATARMNET099aa93adc);if( -IS_ERR(DATARMNET066b8bd537)){DATARMNET17f6bc1be5(DATARMNET72ab5e86d8);goto -DATARMNETc1174a0f45;}DATARMNET3f85732c70=dst_neigh_lookup(&DATARMNET066b8bd537-> -dst,&DATARMNET099aa93adc.daddr);ip_rt_put(DATARMNET066b8bd537);if(! +DATARMNET099aa93adc.flowi4_oif=DATARMNET813ca18d06->ifindex;DATARMNET099aa93adc. +flowi4_flags=FLOWI_FLAG_KNOWN_NH;DATARMNET066b8bd537=ip_route_output_key(& +init_net,&DATARMNET099aa93adc);if(IS_ERR(DATARMNET066b8bd537)){ +DATARMNET17f6bc1be5(DATARMNET72ab5e86d8);goto DATARMNETc1174a0f45;} +DATARMNET3f85732c70=dst_neigh_lookup(&DATARMNET066b8bd537->dst,& +DATARMNET099aa93adc.daddr);ip_rt_put(DATARMNET066b8bd537);if(! DATARMNET3f85732c70){DATARMNET17f6bc1be5(DATARMNET0e6bd55b8b);goto -DATARMNETc1174a0f45;}if(DATARMNET3f85732c70->dev!=DATARMNET543491eb0f->dev){ -DATARMNET17f6bc1be5(DATARMNET64aecaa865);neigh_release(DATARMNET3f85732c70);goto - DATARMNETc1174a0f45;}DATARMNET268a8314cf=neigh_resolve_output( -DATARMNET3f85732c70,DATARMNET543491eb0f);neigh_release(DATARMNET3f85732c70);if( -likely(DATARMNET268a8314cf==NET_XMIT_SUCCESS||DATARMNET268a8314cf==NET_XMIT_CN)) -{DATARMNET17f6bc1be5(DATARMNETc1b437465b);}else{DATARMNET17f6bc1be5( -DATARMNET43a65c0be7);}return RX_HANDLER_CONSUMED;}else if(DATARMNET543491eb0f-> -dev&&(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6))&&!(strncmp( -DATARMNET543491eb0f->dev->name, +DATARMNETc1174a0f45;}if(DATARMNET3f85732c70->dev!=DATARMNET543491eb0f->dev||! +DATARMNET3f85732c70->dev->header_ops){DATARMNET17f6bc1be5(DATARMNET64aecaa865); +neigh_release(DATARMNET3f85732c70);goto DATARMNETc1174a0f45;}DATARMNET268a8314cf +=neigh_resolve_output(DATARMNET3f85732c70,DATARMNET543491eb0f);neigh_release( +DATARMNET3f85732c70);if(likely(DATARMNET268a8314cf==NET_XMIT_SUCCESS|| +DATARMNET268a8314cf==NET_XMIT_CN)){DATARMNET17f6bc1be5(DATARMNETc1b437465b);} +else{DATARMNET17f6bc1be5(DATARMNET43a65c0be7);}return RX_HANDLER_CONSUMED;}else +if(DATARMNET543491eb0f->dev&&(DATARMNET543491eb0f->protocol==htons(ETH_P_IPV6)) +&&!(strncmp(DATARMNET543491eb0f->dev->name, "\x72\x5f\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61\x30",IFNAMSIZ))){struct ipv6hdr*DATARMNETbf55123e5b,DATARMNETcf1d9e2c1e;struct net_device* DATARMNET813ca18d06=NULL;struct flowi6 DATARMNET8fbe36a2fa={};struct neighbour* @@ -86,26 +89,28 @@ DATARMNET934406764d());if(!DATARMNET813ca18d06){DATARMNET17f6bc1be5( DATARMNET9cff15f94d);goto DATARMNETc1174a0f45;}DATARMNET543491eb0f->dev= DATARMNET813ca18d06;memcpy(&DATARMNET8fbe36a2fa.saddr,&DATARMNETbf55123e5b-> saddr,sizeof(struct in6_addr));memcpy(&DATARMNET8fbe36a2fa.daddr,& -DATARMNETbf55123e5b->daddr,sizeof(struct in6_addr));dst=ipv6_stub-> -ipv6_dst_lookup_flow(&init_net,NULL,&DATARMNET8fbe36a2fa,NULL);if(IS_ERR(dst)){ -DATARMNET17f6bc1be5(DATARMNETbf6e6853f9);goto DATARMNETc1174a0f45;} -DATARMNET3f85732c70=dst_neigh_lookup(dst,&DATARMNET8fbe36a2fa.daddr);dst_release -(dst);if(!DATARMNET3f85732c70){DATARMNET17f6bc1be5(DATARMNETa0da722329);goto -DATARMNETc1174a0f45;}if(DATARMNET3f85732c70->dev!=DATARMNET543491eb0f->dev){ -DATARMNET17f6bc1be5(DATARMNET729e252fb9);neigh_release(DATARMNET3f85732c70);goto - DATARMNETc1174a0f45;}DATARMNET268a8314cf=neigh_resolve_output( -DATARMNET3f85732c70,DATARMNET543491eb0f);neigh_release(DATARMNET3f85732c70);if( -likely(DATARMNET268a8314cf==NET_XMIT_SUCCESS||DATARMNET268a8314cf==NET_XMIT_CN)) -{DATARMNET17f6bc1be5(DATARMNET04311361a2);}else{DATARMNET17f6bc1be5( -DATARMNET13bbe5f5c5);}return RX_HANDLER_CONSUMED;}return RX_HANDLER_PASS; -DATARMNETc1174a0f45:kfree_skb(DATARMNET543491eb0f);return RX_HANDLER_CONSUMED;} -static rx_handler_result_t DATARMNET68fe094884(struct sk_buff** -DATARMNET89946cec52){struct DATARMNET0ca9d8ead7 DATARMNETa76763310b={};struct -DATARMNET4f49486833*DATARMNET63b1a086d5;struct sk_buff*DATARMNET543491eb0f=* -DATARMNET89946cec52;unsigned long DATARMNETfb0677cc3c;if(!DATARMNET543491eb0f|| -DATARMNET543491eb0f->pkt_type==PACKET_LOOPBACK)return RX_HANDLER_PASS;if( -DATARMNET543491eb0f->dev&&strncmp(DATARMNET543491eb0f->dev->name, -"\x72\x5f\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61\x30",IFNAMSIZ))nf_ct_set( +DATARMNETbf55123e5b->daddr,sizeof(struct in6_addr));DATARMNET8fbe36a2fa. +flowi6_oif=DATARMNET813ca18d06->ifindex;DATARMNET8fbe36a2fa.flowi6_flags= +FLOWI_FLAG_KNOWN_NH;dst=ipv6_stub->ipv6_dst_lookup_flow(&init_net,NULL,& +DATARMNET8fbe36a2fa,NULL);if(IS_ERR(dst)){DATARMNET17f6bc1be5( +DATARMNETbf6e6853f9);goto DATARMNETc1174a0f45;}DATARMNET3f85732c70= +dst_neigh_lookup(dst,&DATARMNET8fbe36a2fa.daddr);dst_release(dst);if(! +DATARMNET3f85732c70){DATARMNET17f6bc1be5(DATARMNETa0da722329);goto +DATARMNETc1174a0f45;}if(DATARMNET3f85732c70->dev!=DATARMNET543491eb0f->dev||! +DATARMNET3f85732c70->dev->header_ops){DATARMNET17f6bc1be5(DATARMNET729e252fb9); +neigh_release(DATARMNET3f85732c70);goto DATARMNETc1174a0f45;}DATARMNET268a8314cf +=neigh_resolve_output(DATARMNET3f85732c70,DATARMNET543491eb0f);neigh_release( +DATARMNET3f85732c70);if(likely(DATARMNET268a8314cf==NET_XMIT_SUCCESS|| +DATARMNET268a8314cf==NET_XMIT_CN)){DATARMNET17f6bc1be5(DATARMNET04311361a2);} +else{DATARMNET17f6bc1be5(DATARMNET13bbe5f5c5);}return RX_HANDLER_CONSUMED;} +return RX_HANDLER_PASS;DATARMNETc1174a0f45:kfree_skb(DATARMNET543491eb0f);return + RX_HANDLER_CONSUMED;}static rx_handler_result_t DATARMNET68fe094884(struct +sk_buff**DATARMNET89946cec52){struct DATARMNET0ca9d8ead7 DATARMNETa76763310b={}; +struct DATARMNET4f49486833*DATARMNET63b1a086d5;struct sk_buff* +DATARMNET543491eb0f=*DATARMNET89946cec52;unsigned long DATARMNETfb0677cc3c;if(! +DATARMNET543491eb0f||DATARMNET543491eb0f->pkt_type==PACKET_LOOPBACK)return +RX_HANDLER_PASS;if(DATARMNET543491eb0f->dev&&strncmp(DATARMNET543491eb0f->dev-> +name,"\x72\x5f\x72\x6d\x6e\x65\x74\x5f\x64\x61\x74\x61\x30",IFNAMSIZ))nf_ct_set( DATARMNET543491eb0f,NULL,IP_CT_UNTRACKED);if(DATARMNET543491eb0f->protocol== htons(ETH_P_IP)){struct iphdr*DATARMNET86f1f2cdc9,DATARMNETbf6548198e; DATARMNET86f1f2cdc9=skb_header_pointer(DATARMNET543491eb0f,(0xd2d+202-0xdf7),