OsmoHLR> list
  show version
  show online-help
  list
  exit
  help
  enable
  terminal length <0-512>
  terminal no length
  who
  show history
  logging enable
...
  show logging vty
  show alarms
  show talloc-context (application|all) (full|brief|DEPTH)
  show talloc-context (application|all) (full|brief|DEPTH) tree ADDRESS
  show talloc-context (application|all) (full|brief|DEPTH) filter REGEXP
  show gsup-connections
  subscriber (imsi|msisdn|id) IDENT show

OsmoHLR> enable
OsmoHLR# list
  help
  list
  write terminal
  write file
  write memory
  write
  show running-config
  exit
  disable
  configure terminal
  copy running-config startup-config
  show startup-config
  show version
  show online-help
  terminal length <0-512>
  terminal no length
  who
  show history
  terminal monitor
  terminal no monitor
  logging enable
...

OsmoHLR# configure terminal
OsmoHLR(config)# list
  help
  list
  write terminal
  write file
  write memory
  write
  show running-config
  exit
  end
...
  hlr

OsmoHLR(config)# hlr
OsmoHLR(config-hlr)# list
  help
  list
  write terminal
  write file
  write memory
  write
  show running-config
  exit
  end
  gsup
  usse (internal|NAME)
  no usse (internal|NAME)
  usse-default (internal|NAME)
  no usse-default

OsmoHLR(config-hlr)# gsup
OsmoHLR(config-hlr-gsup)# list
  help
  list
  write terminal
  write file
  write memory
  write
  show running-config
  exit
  end
  bind ip A.B.C.D

OsmoHLR(config-hlr-gsup)# exit
OsmoHLR(config-hlr)# usse test
OsmoHLR(config-hlr-eusse)# list
  help
  list
  write terminal
  write file
  write memory
  write
  show running-config
  exit
  end
  pattern (code|regexp|prefix) PATTERN
  no pattern (code|regexp|prefix) PATTERN

OsmoHLR(config-hlr-eusse)# exit
OsmoHLR(config-hlr)# usse internal
OsmoHLR(config-hlr-iusse)# list
  help
  list
  write terminal
  write file
  write memory
  write
  show running-config
  exit
  end
  pattern (code|regexp|prefix) PATTERN response .RESPONSE
  no pattern (code|regexp|prefix) PATTERN

OsmoHLR(config-hlr-iusse)# exit
OsmoHLR(config-hlr)# no usse test
OsmoHLR(config-hlr)# no usse internal

OsmoHLR(config-hlr)# exit
OsmoHLR(config)# exit
OsmoHLR# configure terminal
OsmoHLR(config)# hlr
OsmoHLR(config-hlr)# gsup
OsmoHLR(config-hlr-gsup)# end
OsmoHLR# disable
OsmoHLR> enable

OsmoHLR# show running-config

Current configuration:
!
!
log stderr
  logging filter all 1
  logging color 1
  logging print category 1
  logging print extended-timestamp 1
  logging print file 1
  logging level all debug
  logging level main notice
  logging level db notice
  logging level auc notice
...
!
line vty
 no login
!
ctrl
 bind 127.0.0.1
hlr
 gsup
  bind ip 127.0.0.1
 no usse-default
end
