PEERING module
Admin Guide
Section titled “Admin Guide”Overview
Section titled “Overview”Peering module allows SIP providers (operators or organizations) to verify from a broker if source or destination of a SIP request is a trusted peer.
In order to participate in the trust community provided by a broker, each SIP provider registers with the broker the domains (host parts of SIP URIs) that they serve. When a SIP proxy of a provider needs to send a SIP request to a non-local domain, it can find out from the broker using verify_destination() function if the non-local domain is served by a trusted peer. If so, the provider receives from the broker a hash of the SIP request and a timestamp that it includes in the request to the non-local domain. When a SIP proxy of the non-local domain receives the SIP request, it, in turn, can verify from the broker using verify_source() function if the request came from a trusted peer.
Verification functions communicate with the broker using Radius protocol. Sample FreeRADIUS configuration files for broker’s Radius server are available from http://www.wirlab.net/tsi/.
Comments and suggestions for improvements are welcome.
Dependencies
Section titled “Dependencies”OpenSIPS Modules
Section titled “OpenSIPS Modules”The module depends on the following modules (in the other words the listed modules must be loaded before this module):
- none
External Libraries or Applications
Section titled “External Libraries or Applications”The following libraries or applications must be installed before compilling OpenSIPS with this module loaded:
- radiusclient-ng 0.5.0 or higher — library and development files. See http://developer.berlios.de/projects/radiusclient-ng/.
Exported Parameters
Section titled “Exported Parameters”radius_config (string)
Section titled “radius_config (string)”This is the location of the configuration file of radius client libraries.
Default value is “/usr/local/etc/radiusclient-ng/radiusclient.conf”.
modparam("peering", "radius_config", "/etc/broker/radiusclient.conf")verify_destination_service_type (integer)
Section titled “verify_destination_service_type (integer)”This is the value of the Service-Type Radius attribute to be used, when sender of SIP Request verifies request’s destination using verify_destination() function.
Default value is dictionary value of “Sip-Verify-Destination” Service-Type.
modparam("peering", "verify_destination_service_type", 21)verify_source_service_type (integer)
Section titled “verify_source_service_type (integer)”This is the value of the Service-Type Radius attribute to be used, when receiver of SIP Request verifies request’s source using verify_source() function.
Default value is dictionary value of “Sip-Verify-Source” Service-Type.
modparam("peering", "verify_source_service_type", 22)Exported Functions
Section titled “Exported Functions”verify_destination()
Section titled “verify_destination()”Function verify_destination() queries from broker’s Radius server if domain (host part) of Request URI is served by a trusted peer. Radius request contains the following attributes/values:
- User-Name - Request-URI host
- SIP-URI-User - Request-URI user
- SIP-From-Tag - From tag
- SIP-Call-Id - Call id
- Service-Type - verify_destination_service_type
Function returns value 1 if domain of Request URI is served by a trusted peer and -1 otherwise. In case of positive result, Radius server returns a set of SIP-AVP reply attributes. Value of each SIP-AVP is of form:
[#]name(:|#)value
Value of each SIP-AVP reply attribute is mapped to an OpenSIPS AVP. Prefix # in front of name or value indicates a string name or string value, respectively.
One of the SIP-AVP reply attributes contains a string that the source peer must include “as is” in a P-Request-Hash header when it sends the SIP request to the destination peer. The string value may, for example, be of form hash@timestamp, where hash contains a hash calculated by the broker based on the attributes of the query and some local information and timestamp is the time when the calculation was done.
AVP names used in reply attributes are assigned by the broker.
This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.
...if (verify_destination()) { append_hf("P-Request-Hash: $avp(i:200)\r\n");}...verify_source()
Section titled “verify_source()”Function verify_source() queries from broker’s Radius server if SIP request was received from a trusted peer. Radius request contains the following attributes/values:
- User-Name - Request-URI host
- SIP-URI-User - Request-URI user
- SIP-From-Tag - From tag
- SIP-Call-Id - Call id
- SIP-Request-Hash - body of P-Request-Hash header
- Service-Type - verify_source_service_type
Function returns value 1 if SIP request was received from a trusted peer and -1 otherwise. In case of positive result, Radius server may return a set of SIP-AVP reply attributes. Value of each SIP-AVP is of form:
[#]name(:|#)value
Value of each SIP-AVP reply attribute is mapped to an OpenSIPS AVP. Prefix # in front of name or value indicates a string name or string value, respectively.
AVP names used in reply attributes are assigned by the broker.
This function can be used from REQUEST_ROUTE and FAILURE_ROUTE.
...if (is_present_hf("P-Request-Hash")) { if (verify_source()) { xlog("L_INFO", "Request came from trusted peer\n") }}...Contributors
Section titled “Contributors”By Commit Statistics
Section titled “By Commit Statistics”Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)
| # | Name | DevScore | Commits | Lines++ | Lines— |
|---|---|---|---|---|---|
| 1. | Juha Heinanen (@juha-h) | 13 | 4 | 909 | 5 |
| 2. | Stefan Darius (@dariusstefan) | 8 | 3 | 294 | 62 |
| 3. | Bogdan-Andrei Iancu (@bogdan-iancu) | 7 | 5 | 27 | 33 |
| 4. | Razvan Crainea (@razvancrainea) | 3 | 1 | 2 | 2 |
(1) DevScore = author_commits + author_lines_added / (project_lines_added / project_commits) + author_lines_deleted / (project_lines_deleted / project_commits)
(2) including any documentation-related commits, excluding merge commits
(3) ignoring whitespace edits, renamed files and auto-generated files
By Commit Activity
Section titled “By Commit Activity”| # | Name | Commit Activity |
|---|---|---|
| 1. | Stefan Darius (@dariusstefan) | Jun 2026 - Jul 2026 |
| 2. | Razvan Crainea (@razvancrainea) | Jun 2026 - Jun 2026 |
| 3. | Bogdan-Andrei Iancu (@bogdan-iancu) | Jun 2008 - Oct 2008 |
| 4. | Juha Heinanen (@juha-h) | May 2008 - Jun 2008 |
(1) including any documentation-related commits, excluding merge commits
Documentation
Section titled “Documentation”Contributors
Section titled “Contributors”Last edited by: Razvan Crainea (@razvancrainea), Bogdan-Andrei Iancu (@bogdan-iancu), Juha Heinanen (@juha-h).
License
Section titled “License”All documentation files (i.e. .md extension) are licensed under the Creative Common License 4.0