Coding style fix. Fix too many leading tabs and line length.
Signed-off-by: Joash Naidoo <redacted>
---
Changes in V4:
- Fix compiler warning introduced: mixing declarations and code
Changes in v3:
- Fix flipped condition mistake
- move skb NULL check before dereferencing it
Changes in v2:
- Flip additional nested if conditions and don't reverse the last if statement
- Move declarations to start of function
- Separate converting __constant_htons to htons to another patch
---
drivers/staging/r8188eu/core/rtw_br_ext.c | 75 +++++++++++++----------
1 file changed, 42 insertions(+), 33 deletions(-)
@@ -601,42 +601,51 @@ struct dhcpMessage {voiddhcp_flag_bcast(structadapter*priv,structsk_buff*skb){+__be16protocol;+structiphdr*iph;+structudphdr*udph;+structdhcpMessage*dhcph;+u32cookie;+if(!skb)return;-if(!priv->ethBrExtInfo.dhcp_bcst_disable){-__be16protocol=*((__be16*)(skb->data+2*ETH_ALEN));--if(protocol==__constant_htons(ETH_P_IP)){/* IP */-structiphdr*iph=(structiphdr*)(skb->data+ETH_HLEN);--if(iph->protocol==IPPROTO_UDP){/* UDP */-structudphdr*udph=(structudphdr*)((size_t)iph+(iph->ihl<<2));--if((udph->source==__constant_htons(CLIENT_PORT))&&-(udph->dest==__constant_htons(SERVER_PORT))){/* DHCP request */-structdhcpMessage*dhcph=-(structdhcpMessage*)((size_t)udph+sizeof(structudphdr));-u32cookie=be32_to_cpu((__be32)dhcph->cookie);--if(cookie==DHCP_MAGIC){/* match magic word */-if(!(dhcph->flags&htons(BROADCAST_FLAG))){-/* if not broadcast */-registerintsum=0;--/* or BROADCAST flag */-dhcph->flags|=htons(BROADCAST_FLAG);-/* recalculate checksum */-sum=~(udph->check)&0xffff;-sum+=be16_to_cpu(dhcph->flags);-while(sum>>16)-sum=(sum&0xffff)+(sum>>16);-udph->check=~sum;-}-}-}-}-}+protocol=*((__be16*)(skb->data+2*ETH_ALEN));+iph=(structiphdr*)(skb->data+ETH_HLEN);+udph=(structudphdr*)((size_t)iph+(iph->ihl<<2));+/* DHCP request */+dhcph=+(structdhcpMessage*)((size_t)udph+sizeof(structudphdr));+cookie=be32_to_cpu((__be32)dhcph->cookie);++if(priv->ethBrExtInfo.dhcp_bcst_disable)+return;++if(protocol!=htons(ETH_P_IP))/* IP */+return;++if(iph->protocol!=IPPROTO_UDP)/* UDP */+return;++if((udph->source!=__constant_htons(CLIENT_PORT))||+(udph->dest!=__constant_htons(SERVER_PORT)))+return;++if(cookie!=DHCP_MAGIC)/* match magic word */+return;++if(!(dhcph->flags&htons(BROADCAST_FLAG))){+/* if not broadcast */+registerintsum=0;++/* or BROADCAST flag */+dhcph->flags|=htons(BROADCAST_FLAG);+/* recalculate checksum */+sum=~(udph->check)&0xffff;+sum+=be16_to_cpu(dhcph->flags);+while(sum>>16)+sum=(sum&0xffff)+(sum>>16);+udph->check=~sum;}}
On Wed, Sep 28, 2022 at 09:53:24AM +0200, Joash Naidoo wrote:
quoted hunk
Coding style fix. Fix too many leading tabs and line length.
Signed-off-by: Joash Naidoo <redacted>
---
Changes in V4:
- Fix compiler warning introduced: mixing declarations and code
Changes in v3:
- Fix flipped condition mistake
- move skb NULL check before dereferencing it
Changes in v2:
- Flip additional nested if conditions and don't reverse the last if statement
- Move declarations to start of function
- Separate converting __constant_htons to htons to another patch
---
drivers/staging/r8188eu/core/rtw_br_ext.c | 75 +++++++++++++----------
1 file changed, 42 insertions(+), 33 deletions(-)
@@ -601,42 +601,51 @@ struct dhcpMessage {voiddhcp_flag_bcast(structadapter*priv,structsk_buff*skb){+__be16protocol;+structiphdr*iph;+structudphdr*udph;+structdhcpMessage*dhcph;+u32cookie;+if(!skb)return;-if(!priv->ethBrExtInfo.dhcp_bcst_disable){-__be16protocol=*((__be16*)(skb->data+2*ETH_ALEN));--if(protocol==__constant_htons(ETH_P_IP)){/* IP */-structiphdr*iph=(structiphdr*)(skb->data+ETH_HLEN);--if(iph->protocol==IPPROTO_UDP){/* UDP */-structudphdr*udph=(structudphdr*)((size_t)iph+(iph->ihl<<2));--if((udph->source==__constant_htons(CLIENT_PORT))&&-(udph->dest==__constant_htons(SERVER_PORT))){/* DHCP request */-structdhcpMessage*dhcph=-(structdhcpMessage*)((size_t)udph+sizeof(structudphdr));-u32cookie=be32_to_cpu((__be32)dhcph->cookie);--if(cookie==DHCP_MAGIC){/* match magic word */-if(!(dhcph->flags&htons(BROADCAST_FLAG))){-/* if not broadcast */-registerintsum=0;--/* or BROADCAST flag */-dhcph->flags|=htons(BROADCAST_FLAG);-/* recalculate checksum */-sum=~(udph->check)&0xffff;-sum+=be16_to_cpu(dhcph->flags);-while(sum>>16)-sum=(sum&0xffff)+(sum>>16);-udph->check=~sum;-}-}-}-}-}+protocol=*((__be16*)(skb->data+2*ETH_ALEN));+iph=(structiphdr*)(skb->data+ETH_HLEN);+udph=(structudphdr*)((size_t)iph+(iph->ihl<<2));+/* DHCP request */+dhcph=+(structdhcpMessage*)((size_t)udph+sizeof(structudphdr));
Very odd formatting, why split that line?
quoted hunk
+ cookie = be32_to_cpu((__be32)dhcph->cookie);++ if (priv->ethBrExtInfo.dhcp_bcst_disable)+ return;
Why are you not checking for this _before_ all of the above
assignments?
quoted hunk
++ if (protocol != htons(ETH_P_IP)) /* IP */+ return;
You can check for this right after assigning the protocol variable.
quoted hunk
++ if (iph->protocol != IPPROTO_UDP) /* UDP */+ return;
You can check for this right after setting iph.
But also, shouldn't you just be using the ip_hdr() call instead of doing
the crazy cast above?
thanks,
greg k-h
On Wed, Sep 28, 2022 at 09:53:24AM +0200, Joash Naidoo wrote:
quoted
Coding style fix. Fix too many leading tabs and line length.
Signed-off-by: Joash Naidoo <redacted>
---
Changes in V4:
- Fix compiler warning introduced: mixing declarations and code
Changes in v3:
- Fix flipped condition mistake
- move skb NULL check before dereferencing it
Changes in v2:
- Flip additional nested if conditions and don't reverse the last if statement
- Move declarations to start of function
- Separate converting __constant_htons to htons to another patch
---
drivers/staging/r8188eu/core/rtw_br_ext.c | 75 +++++++++++++----------
1 file changed, 42 insertions(+), 33 deletions(-)
@@ -601,42 +601,51 @@ struct dhcpMessage {voiddhcp_flag_bcast(structadapter*priv,structsk_buff*skb){+__be16protocol;+structiphdr*iph;+structudphdr*udph;+structdhcpMessage*dhcph;+u32cookie;+if(!skb)return;-if(!priv->ethBrExtInfo.dhcp_bcst_disable){-__be16protocol=*((__be16*)(skb->data+2*ETH_ALEN));--if(protocol==__constant_htons(ETH_P_IP)){/* IP */-structiphdr*iph=(structiphdr*)(skb->data+ETH_HLEN);--if(iph->protocol==IPPROTO_UDP){/* UDP */-structudphdr*udph=(structudphdr*)((size_t)iph+(iph->ihl<<2));--if((udph->source==__constant_htons(CLIENT_PORT))&&-(udph->dest==__constant_htons(SERVER_PORT))){/* DHCP request */-structdhcpMessage*dhcph=-(structdhcpMessage*)((size_t)udph+sizeof(structudphdr));-u32cookie=be32_to_cpu((__be32)dhcph->cookie);--if(cookie==DHCP_MAGIC){/* match magic word */-if(!(dhcph->flags&htons(BROADCAST_FLAG))){-/* if not broadcast */-registerintsum=0;--/* or BROADCAST flag */-dhcph->flags|=htons(BROADCAST_FLAG);-/* recalculate checksum */-sum=~(udph->check)&0xffff;-sum+=be16_to_cpu(dhcph->flags);-while(sum>>16)-sum=(sum&0xffff)+(sum>>16);-udph->check=~sum;-}-}-}-}-}+protocol=*((__be16*)(skb->data+2*ETH_ALEN));+iph=(structiphdr*)(skb->data+ETH_HLEN);+udph=(structudphdr*)((size_t)iph+(iph->ihl<<2));+/* DHCP request */+dhcph=+(structdhcpMessage*)((size_t)udph+sizeof(structudphdr));
Very odd formatting, why split that line?
quoted
+ cookie = be32_to_cpu((__be32)dhcph->cookie);++ if (priv->ethBrExtInfo.dhcp_bcst_disable)+ return;
Why are you not checking for this _before_ all of the above
assignments?
quoted
++ if (protocol != htons(ETH_P_IP)) /* IP */+ return;
You can check for this right after assigning the protocol variable.
quoted
++ if (iph->protocol != IPPROTO_UDP) /* UDP */+ return;
You can check for this right after setting iph.
Thank you for your time and feedback. I agree with your comments. My rationale for having the way it is stems from my inclination to stuck to the original code as close as possible. In hindsight, the ordering could be better. I will submit another revision.
But also, shouldn't you just be using the ip_hdr() call instead of doing
the crazy cast above?
I would need to investigate and test first before commenting. If a change had to be made, I believe it will go in a separate patch?
On Wed, Sep 28, 2022 at 06:20:28PM +0200, Joash Naidoo wrote:
quoted
quoted
But also, shouldn't you just be using the ip_hdr() call instead of doing
the crazy cast above?
I would need to investigate and test first before commenting. If a change
had to be made, I believe it will go in a separate patch?
Yes, that would be good to do as a patch series.
thanks,
greg k-h
Hi all
I want to investigate Greg's suggestion to replace the original code's iph cast with ip_hdr(). Looking into the ip_hdr() function it seems it effectively casts skb->head + skb->network_header property (See [1, 2]) whereas the original code casts skb->data + ETH_HLEN [3]. My goal was to use printk statements to see if they're equivalent before making any actual changes.
Could anyone advise to a high level action which will trigger the dhcp_flag_bcast() function, as seen in my patch. I have limited knowledge but I would imagine this function is called when the device broadcasts an IP address request from the DHCP server. I am using dhcpcd as a client and I have tried to manually trigger this action by deleting device's lease file and restarting dhcpcd. Among trying other basic things, I have been unsuccessful at triggering this function.
Looking further up the code at the rtw_xmit() function [4], I learnt the following. Perhaps understanding br_port may also help me.
void *br_port = NULL;
br_port = rcu_dereference(padapter->pnetdev->rx_handler_data); // <-- this returns 0x00
if (br_port && check_fwstate(pmlmepriv, WIFI_STATION_STATE | WIFI_ADHOC_STATE)) { // <-- false because of br_port, second condition is true
res = rtw_br_client_tx(padapter, ppkt); // <-- later calls the dhcp_flag_bcast() See [5]
if (res == -1) {
rtw_free_xmitframe(pxmitpriv, pxmitframe);
return -1;
}
}
[1] https://elixir.bootlin.com/linux/v6.0-rc5/source/include/linux/ip.h#L19
[2] https://elixir.bootlin.com/linux/v6.0-rc5/source/include/linux/skbuff.h#L2819
[3] https://elixir.bootlin.com/linux/v6.0-rc5/source/drivers/staging/r8188eu/core/rtw_br_ext.c#L611
[4] https://elixir.bootlin.com/linux/v6.0-rc5/source/drivers/staging/r8188eu/core/rtw_xmit.c#L1670
[5] https://elixir.bootlin.com/linux/v6.0-rc5/source/drivers/staging/r8188eu/core/rtw_xmit.c#L1598
Thank you all for your time and support.
Kind regards,
Joash