WhatsApp Call Not Connecting

At times, when placing WhatsApp calls from my LAN, it rings but does not connect when the other party answers.

The workaround is to turn Off and On the WiFi connection on my phone. Then the call connects and everything works fine.

I only experience this issue on my LAN. I experience this issue on two different phones. I lean to believe there is something going on with my OpenWRT setup. Any pointers on how to begut this further?

Model Linksys WRT1900AC v1
Architecture ARMv7 Processor rev 2 (v7l)
Firmware Version OpenWrt 21.02.0 r16279-5cc0535800 / LuCI openwrt-21.02 branch git-21.231.26241-422c175
Kernel Version 5.4.143
Services Adblock 4.1.3

Tried disabling adblock?

I can give it a try next time it happens (it does not always happen). Ideally I would like Adblock as I find it super-useful. Maybe there is a domain or two I can whitelist.

1 Like

Disabling Adblock did not help. Still had to turn Off and On the WiFi on the phone for the call to finally connect.

when did you restart your phone last time ? Restart your phone maybe this will help.

The phone was restarted two days ago.

Post your /etc/config/firewall.
Are you using iPhones?
Also is your phone software & whatsapp app up-to-date?
Hope you're not using apps like adguard or vpn on your phones.

# cat /etc/config/firewall 

config defaults
	option syn_flood '1'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'REJECT'

config zone
	option name 'lan'
	option input 'ACCEPT'
	option output 'ACCEPT'
	option forward 'ACCEPT'
	list network 'lan'

config zone
	option name 'wan'
	option input 'REJECT'
	option output 'ACCEPT'
	option forward 'REJECT'
	option masq '1'
	option mtu_fix '1'
	list network 'wan'

config forwarding
	option src 'lan'
	option dest 'wan'

config rule
	option name 'Allow-DHCP-Renew'
	option src 'wan'
	option proto 'udp'
	option dest_port '68'
	option target 'ACCEPT'
	option family 'ipv4'

config rule
	option name 'Allow-Ping'
	option src 'wan'
	option proto 'icmp'
	option icmp_type 'echo-request'
	option family 'ipv4'
	option target 'ACCEPT'

config rule
	option name 'Allow-IGMP'
	option src 'wan'
	option proto 'igmp'
	option family 'ipv4'
	option target 'ACCEPT'

config rule
	option name 'Allow-DHCPv6'
	option src 'wan'
	option proto 'udp'
	option src_ip 'fc00::/6'
	option dest_ip 'fc00::/6'
	option dest_port '546'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-MLD'
	option src 'wan'
	option proto 'icmp'
	option src_ip 'fe80::/10'
	list icmp_type '130/0'
	list icmp_type '131/0'
	list icmp_type '132/0'
	list icmp_type '143/0'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-ICMPv6-Input'
	option src 'wan'
	option proto 'icmp'
	list icmp_type 'echo-request'
	list icmp_type 'echo-reply'
	list icmp_type 'destination-unreachable'
	list icmp_type 'packet-too-big'
	list icmp_type 'time-exceeded'
	list icmp_type 'bad-header'
	list icmp_type 'unknown-header-type'
	list icmp_type 'router-solicitation'
	list icmp_type 'neighbour-solicitation'
	list icmp_type 'router-advertisement'
	list icmp_type 'neighbour-advertisement'
	option limit '1000/sec'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-ICMPv6-Forward'
	option src 'wan'
	option dest '*'
	option proto 'icmp'
	list icmp_type 'echo-request'
	list icmp_type 'echo-reply'
	list icmp_type 'destination-unreachable'
	list icmp_type 'packet-too-big'
	list icmp_type 'time-exceeded'
	list icmp_type 'bad-header'
	list icmp_type 'unknown-header-type'
	option limit '1000/sec'
	option family 'ipv6'
	option target 'ACCEPT'

config rule
	option name 'Allow-IPSec-ESP'
	option src 'wan'
	option dest 'lan'
	option proto 'esp'
	option target 'ACCEPT'

config rule
	option name 'Allow-ISAKMP'
	option src 'wan'
	option dest 'lan'
	option dest_port '500'
	option proto 'udp'
	option target 'ACCEPT'

config rule
	option name 'Support-UDP-Traceroute'
	option src 'wan'
	option dest_port '33434:33689'
	option proto 'udp'
	option family 'ipv4'
	option target 'REJECT'
	option enabled 'false'

config include
	option path '/etc/firewall.user'

/etc/config/firewall looks okay.
Are you using iPhones?

No, Android 12

I have the same issue on devices in my home wifi network also.
It is marked something like "connection in progress" and its on Android 10 & 12.
Don't know what could be the issue...
@rares your firewall seems to be default configuration, isn't it ?
Do you have Secure DNS on your android devices ? If yes, maybe try without it ?
Is your Android a custom rom ?

The firewall is the default configuration.

The Android is the default ROM from Samsung (S22). The Private DNS is set to Automatic. I'll try OFF and report back.

On WhatsApp enable "the Nearby Devices-permission" if it's listed. And test again.

Also here is a list of changes you can make-

Set WhatsApp battery to unrestricted
Turn off background usage limits > put unused apps to sleep
WhatsApp > application data usage > allow background data usage turned ON
WhatsApp > application data usage > allow data usage while data saver in on turned ON
Intelligent WiFi > switch to mobile data turned OFF

I tend to believe the issue is with Whatsapp only & not OpenWrt.
If everything fails then reset your firmware to default settings and test again

@rares If I'm correct, your issue is the same as me ?
When a call comes or go, it's okay for the reception. But as soon as we answer the call or they answer the call, we have on the phone that the "connection is in progress" (in other words). The connection never establish.

Moreover, I've tried on another network with the same Internet box & provider but without OpenWRT router behind and it works. Both phones connected to the WiFi have the same behavior on both networks.
Because of those reason, I doubt it's an issue on the phones.

I'll try asap on WiFi network of the internet provider box directly to confirm.

Can your adblock be doing this? Have you tried once with that disabled?

By my side, I have no adblock on my router and android devices.

Does it work over cellular data plan - e.g. Vodafone?

I don't know how Whatsapp works, but VOIP calls have two elements - signalling and media.

  • Signalling = Connect me to this number, make the phone ring, use this codec, etc.
  • Media = The audio and or video data.

It looks like your signalling is partially working.

  • The call is proceeding to the stage where the other phone rings.
  • The 'start media transmission' part is failing - i.e. the other person can't answer the call.

Does their phone continue to ring despite them pressing answer (signalling not being generated/relayed correctly)?

Does the call drop immediately when they answer (possible codec issue, but that seems unlikely given you're both using Whatsapp)?

Is the call established (incrementing call timer) but with silence for one or both participants (routing issue leading to packet drops)?

As a first step, I would disable this firewall rule. Perhaps Whatsapp is using a non standard RTP or signalling port and it is being blocked?

config rule
	option name 'Support-UDP-Traceroute'
	option src 'wan'
	option dest_port '33434:33689'
	option proto 'udp'
	option family 'ipv4'
	option target 'REJECT'
	option enabled 'false'

The description in this comment is very accurate of the situation.

Yes, I have tried with Adblock disabled and it did not make a difference.

Does their phone continue to ring despite them pressing answer (signalling not being generated/relayed correctly)?

No. As soon as they answer the phone goes into Media mode. There is a period of 1-2 seconds where it tries to start the call (see/hear the other party) and then it disconnects. The WhatsApp window shows an error message about the WiFi network not allowing calls.

Does the call drop immediately when they answer (possible codec issue, but that seems unlikely given you're both using Whatsapp)?

No, see previous answer.

Is the call established (incrementing call timer) but with silence for one or both participants (routing issue leading to packet drops)?

No, no incrementing timer.

I'll try disabling the firewall rule as advised.

Trying to update the firewall rule @Chatmandu mentioned. It looks like it is not enabled (Enable checkbox not ticked).

config rule
option name 'Support-UDP-Traceroute'
...
option enabled 'false

You should try this approach.