Wednesday 27 February 2019

Adventures With Multicast Dial-peers

After quite a bit of tinkering we managed to get a multicast dial-peer working so that a call into a specific DN is then sent out to a specified multicast group. However there's a few moving parts to be considered, apart from the obvious enabling of multicast end to end between source & destinations. The Cisco Configure Land Mobile Radio (LMR) / Hoot and Holler Over IP on IOS-XE Voice Gateways document is very useful & includes various troubleshooting steps.

Summary of Steps

An analogue port has to be used to source the audio, attempting to use a SIP dial-peer to connect to the multicast dial-peer results in a 404 back from the gateway & a voice IEC syslog messsage about incompatible protocols:

%VOICE_IEC-3-GW: C SCRIPTS: Internal Error (Incompatible protocols): IEC=1.1.47.11.23.0 on callID

To get around this an FXS port was connected back to back with an FXO port, which is configured for PLAR to automatically dial the multicast dial-peer. So the call flow is: DN associated with FXS -> FXO -> multicast.

The multicast dial-peer must be set to a single specific CODEC, because there's no call control to negotiate CODECs.

A Vif interface is required with a /31 or larger mask to source the multicast from. Otherwise the source IP address will end up as nonsense like 0.0.0.1 or 255.255.255.255, resulting in downstream routers dropping the multicast traffic due to it failing the RPF check. The source IP address is actually the Vif interface IP address minus 1, e.g. .2 interface IP = .1 multicast source IP. It does appear to loop around so .1 interface IP = .255 multicast source IP with a /24 subnet mask.

On 4300/4400 series routers ip pim sparse-mode must be enabled on the Service-Engine interface that corresponds to the voice-port, e.g. voice-port 0/1/0 = service-engine0/1/0. Otherwise the audio won't be forwarded over the router's backplane & then out the egress interface.

4300/4400 series routers also have a bug CSCvk02072 that means the multicast RTP stream has DSCP BE (0) instead of EF (46). This can be re-marked via a suitable policy-map applied to the gateway's egress interface.

Lastly at least on IOS XE 16.3.5, for show rtp connection detail & show call active voice brief  the transmit packet counters never increment, staying at zero & giving the impression that the audio isn't being sent when it actually is.

Config Snipppets

ip multicast-routing
!
ip access-list extended VOICE-RTP
 permit udp any host 239.1.1.1 range 8000 48198
!
class-map match-any VOICE
 match access-group name VOICE-RTP
!
policy-map MCAST-QOS
 class VOICE
  set dscp ef
!
interface Service-Engine0/1/0

 description voice-port 0/1/0 backplane
 ip pim sparse-mode
!
interface GigabitEthernet0/0/0
 description Egress Interface
 ip address 192.168.1.1 255.255.255.0
 ip pim sparse-mode
 service-policy output MCAST-QOS
!
interface Vif1

 description Multicast Source Interface
 ip address 172.16.0.255 255.255.255.254
 ip pim sparse-mode
!
voice-port 0/1/0
 connection plar 12345
!
dial-peer voice 100 voip
 destination-pattern 12345
 session protocol multicast
 session target ipv4:239.1.1.1:16384
 codec g711ulaw
 vad aggressive
!
dial-peer voice 200 pots
 incoming called-number .T
 direct-inward-dial
 port 0/1/0

Monday 18 February 2019

CEF Forwarding Decisions

Sometimes it's useful to know which interface a packet will be forwarded out of when there's more than one path to the destination, e.g. troubleshooting asymmetric routing when there's firewalls in the path.
The show ip cef exact-route command provides this information - you pass it the source & destination IP address, plus optionally the source & destination port for platforms where CEF hashes using the ports also. Note that not all platforms support this, but most current Cisco devices do such as the 3850, 4331, Sup8E, etc.
The example below is a 3850 switch with 2 equal cost default routes via 2 different SVIs:

ufs1#sh ip route
Codes: L - local, C - connected, S - static, R - RIP, M - mobile, B - BGP
       D - EIGRP, EX - EIGRP external, O - OSPF, IA - OSPF inter area
       N1 - OSPF NSSA external type 1, N2 - OSPF NSSA external type 2
       E1 - OSPF external type 1, E2 - OSPF external type 2
       i - IS-IS, su - IS-IS summary, L1 - IS-IS level-1, L2 - IS-IS level-2
       ia - IS-IS inter area, * - candidate default, U - per-user static route
       o - ODR, P - periodic downloaded static route, H - NHRP, l - LISP
       a - application route
       + - replicated route, % - next hop override, p - overrides from PfR

Gateway of last resort is 10.83.240.244 to network 0.0.0.0

O*E2  0.0.0.0/0 [110/1] via 10.83.240.244, 2d14h, Vlan12
                [110/1] via 10.83.240.242, 2d14h, Vlan11


ufs1#show ip cef exact-route 10.84.190.1 10.83.232.10
10.84.190.1 -> 10.83.232.10 =>IP adj out of Vlan11, addr 10.83.240.242

ufs1#show ip cef exact-route 10.84.190.1 10.83.251.1
10.84.190.1 -> 10.83.251.1 =>IP adj out of Vlan12, addr 10.83.240.244