# OsmoHLR example configuration for Distributed GSM (mslookup)
hlr
 gsup
  # For D-GSM roaming, osmo-hlr's GSUP must listen on a public IP:
  bind ip 10.9.8.7
  # Each HLR should identify with a distinct name
  ipa-name hlr-23
mslookup
 # Bind mslookup mDNS server and client on default multicast address and port:
 # 239.192.23.42 port 4266
 mdns bind
 # Tell the mslookup server in osmo-hlr which IP+ports to return when a
 # remote voice call or SMS wants to deliver to a local subscriber:
 server
  # local osmo-sip-connector SIP port
  service sip.voice at 10.9.8.7 5060
  # local osmo-msc SMPP port
  service smpp.sms at 10.9.8.7 2775
  # experimental: SMS-over-GSUP: this HLR's GSUP port
  service gsup.sms at 10.9.8.7 4222
  # only required if different from above 'gsup'/'bind ip':
  #service gsup.hlr at 10.9.8.7 4222
