Skip to content
henriquemr edited this page Nov 28, 2021 · 1 revision

Quick Start

Introducing Bromelia-HSS

Welcome to bromelia-hss wiki!

bromelia-hss is fun to use and absolutely easy to add new functionalities. It is the second official implementation of a Diameter-based protocol application by using the Python's Bromélia library. It is designed to run as Docker containers.

  1. hss_app-app: the entrypoint which connects directly either to MME or to DRA over S6a/S6d interface. Whenever an incoming S6a/S6d Diameter request reaches this container, it processes and fire a query towards to central database.
  2. hss_app-postgres: the central database which holds all the subscriber profile. It comes powered with a PostgreSQL database service under the hood.
  3. hss_app-pgadmin: the HSS's database administrative point powered with pgAdmin tool.

bromelia-hss implements the ETSI TS 129 272 V15.4.0 (2018-07) technical specification. However, if you need to customize it in any way just go and play around.

Please make sure that you have the latest version. You can download the source code from here or clone the repository:

$ git clone https://github.com/heimiricmr/bromelia-hss.git

Requirements

Host system

  • Linux based distro or MacOS (with support to Python 3.9 or later)
  • Python 3.9 or later
  • Docker 20.10.7 or later
  • docker-compose 1.29.2 or later

Containers dependencies

  • Python dependencies (bromelia, psycopg2-binary, pycrypto, pyyaml & sqlalchemy)
  • PostgreSQL 11 or later
  • pgAdmin 4 or later

NOTE: Bromelia-HSS was developed and tested on an Apple silicon. It is pretty likely work properly in Linux based distros in general.

Installation

Once Host system requirements are installed, just go to the project folder and issue the docker-compose command below.

$ cd bromelia-hss/hss_app
$ docker-compose up -d
Creating network "hss_app_network" with the default driver
Creating hss_app-postgres ... done
Creating hss_app-app      ... done
Creating hss_app-pgadmin  ... done

Done! You've just instantiated your open source HSS platform! See it.

$ docker container ls -a 
CONTAINER ID   IMAGE              COMMAND                  CREATED          STATUS          PORTS                                              NAMES
5fadc8439936   hss_app_app        "./boot.sh"              21 minutes ago   Up 21 minutes   0.0.0.0:3870->3870/tcp, :::3870->3870/tcp          hss_app-app
765959f22666   dpage/pgadmin4     "/entrypoint.sh"         21 minutes ago   Up 21 minutes   443/tcp, 0.0.0.0:15432->80/tcp, :::15432->80/tcp   hss_app-pgadmin
244947d7f94d   hss_app_postgres   "docker-entrypoint.s…"   21 minutes ago   Up 21 minutes   0.0.0.0:5432->5432/tcp, :::5432->5432/tcp          hss_app-postgres

Integration

If you want to do integrate it to any real MME, be a production be a staging one, you just need to update the hss_app/app/config.yaml file with your local and peer nodes defined.

Below you may find firstly the default config.yaml file followed by an example.

Default

api_version: v1
name: HSS
spec:
  - applications:
      - vendor_id: VENDOR_ID_3GPP
        app_id: DIAMETER_APPLICATION_S6a
    mode: Server
    watchdog_timeout: 30
    local:
      ip_address: 0.0.0.0
      hostname: hss.epc.mynetwork.com
      realm: epc.mynetwork.com
      port: 3870
    peer:
      ip_address: 0.0.0.0
      hostname: mme.epc.mynetwork.com
      realm: epc.mynetwork.com
      port: 3868

Example

api_version: v1
name: HSS
spec:
  - applications:
      - vendor_id: VENDOR_ID_3GPP
        app_id: DIAMETER_APPLICATION_S6a
    mode: Server
    watchdog_timeout: 30
    local:
      ip_address: 0.0.0.0
      hostname: hss00.epc.mnc000.mcc999.3gppnetwork.org
      realm: epc.mnc000.mcc999.3gppnetwork.org
      port: 3870
    peer:
      ip_address: 10.129.241.235
      hostname: mme00.epc.mnc000.mcc999.3gppnetwork.org
      realm: epc.mnc000.mcc999.3gppnetwork.org
      port: 3871

From the local node's perspective, you will change only the hostname and realm keys. Do not change the local IP address, because the container must be listening in localhost in order to receive TCP connections. From the peer node's perspective, you will change as per your requirements. It means that depending on the platform you are going to integrate (eg. MME, DRA), you must overwrite all the peer node's 4 keys.

That's pretty much everything you need to know to run it.

Clone this wiki locally