Skip to content

GFLAGS module

gflags module (global flags) keeps a bitmap of flags in shared memory and may be used to change behaviour of server based on value of the flags. Example:

if (is_gflag("1")) {
t_relay("udp:10.0.0.1:5060");
} else {
t_relay("udp:10.0.0.2:5060");
}

The benefit of this module is the value of the switch flags can be manipulated by external applications such as web interface or command line tools. The size of bitmap is 32.

The module exports external commands that can be used to change the global flags via Management Interface. The MI commands are: “set_gflag”, “reset_gflag” and “is_gflag”.

The module depends on the following modules (in the other words the listed modules must be loaded before this module):

  • none

The initial value of global flags bitmap.

Default value is “0”.

initial parameter usage
modparam("gflags", "initial", 15)

Set the bit at the position “flag” in global flags.

The “flag” (int) parameter can have a value in the range of 0..31.

This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.

set_gflag() usage
...
set_gflag(4);
...

Reset the bit at the position “flag” in global flags.

The “flag” (int) parameter can have a value in the range of 0..31.

This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.

reset_gflag() usage
...
reset_gflag(4);
...

Check if bit at the position “flag” in global flags is set.

The “flag” (int) parameter can have a value in the range of 0..31.

This function can be used from REQUEST_ROUTE, FAILURE_ROUTE, ONREPLY_ROUTE, BRANCH_ROUTE and LOCAL_ROUTE.

is_gflag() usage
...
if(is_gflag(4))
{
log("global flag 4 is set\n");
} else {
log("global flag 4 is not set\n");
};
...

Functions that check or change some flags accepts one parameter which is the flag bitmap/mask specifing the corresponding flags. It is not possible to specify directly the flag position that should be changed as in the functions available in the routing script.

Set the value of some flags (specified by bitmask) to 1.

The parameter value must be a bitmask in decimal or hexa format. The bitmaks has a 32 bit size.

set_gflag usage
...
$ opensips-cli -x mi set_gflag 1
$ opensips-cli -x mi set_gflag 0x3
...

Reset the value of some flags to 0.

The parameter value must be a bitmask in decimal or hexa format. The bitmaks has a 32 bit size.

reset_gflag usage
...
$ opensips-cli -x mi reset_gflag 1
$ opensips-cli -x mi reset_gflag 0x3
...

Returns true if the all the flags from the bitmask are set.

The parameter value must be a bitmask in decimal or hexa format. The bitmaks has a 32 bit size.

The function returns TRUE if all the flags from the set are set and FALSE if at least one is not set.

is_gflag usage
...
$ opensips-cli -x mi set_gflag 1024
$ opensips-cli -x mi is_gflag 1024
TRUE
$ opensips-cli -x mi is_gflag 1025
TRUE
$ opensips-cli -x mi is_gflag 1023
FALSE
$ opensips-cli -x mi set_gflag 0x10
$ opensips-cli -x mi is_gflag 1023
TRUE
$ opensips-cli -x mi is_gflag 1007
FALSE
$ opensips-cli -x mi is_gflag 16
TRUE
...

Return the bitmap with all flags. The function gets no parameters and returns the bitmap in hexa and decimal format.

get_gflags usage
...
$ opensips-cli -x mi get_gflags
0x3039
12345
...

Top contributors by DevScore(1), authored commits(2) and lines added/removed(3)

#NameDevScoreCommitsLines++Lines—
1.Bogdan-Andrei Iancu (@bogdan-iancu)4230517420
2.Daniel-Constantin Mierla (@miconda)14124222
3.Liviu Chircu (@liviuchircu)1192956
4.Razvan Crainea (@razvancrainea)1192826
5.Stefan Darius (@dariusstefan)9526938
6.Henning Westerholt (@henningw)864231
7.Jiri Kuthan (@jiriatipteldotorg)842784
8.Vlad Patrascu (@rvlad-patrascu)748894
9.Richard Revels312411
10.Anca Vamanu3163

All remaining contributors: Konstantin Bokarius, Andrei Pelinescu-Onciul, Dan Pascu (@danpascu), Peter Lemenkov (@lemenkov), Edson Gellert Schubert, Klaus Darilion, Ancuta Onofrei.

(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

#NameCommit Activity
1.Stefan Darius (@dariusstefan)Jun 2026 - Jul 2026
2.Razvan Crainea (@razvancrainea)Sep 2011 - Jun 2026
3.Liviu Chircu (@liviuchircu)Mar 2014 - Sep 2020
4.Dan Pascu (@danpascu)May 2019 - May 2019
5.Vlad Patrascu (@rvlad-patrascu)May 2017 - Apr 2019
6.Bogdan-Andrei Iancu (@bogdan-iancu)Oct 2005 - Apr 2019
7.Peter Lemenkov (@lemenkov)Jun 2018 - Jun 2018
8.Anca VamanuSep 2009 - Sep 2009
9.Richard RevelsAug 2008 - Aug 2008
10.Daniel-Constantin Mierla (@miconda)Oct 2005 - Jun 2008

All remaining contributors: Konstantin Bokarius, Edson Gellert Schubert, Henning Westerholt (@henningw), Ancuta Onofrei, Klaus Darilion, Andrei Pelinescu-Onciul, Jiri Kuthan (@jiriatipteldotorg).

(1) including any documentation-related commits, excluding merge commits

Last edited by: Razvan Crainea (@razvancrainea), Vlad Patrascu (@rvlad-patrascu), Peter Lemenkov (@lemenkov), Liviu Chircu (@liviuchircu), Bogdan-Andrei Iancu (@bogdan-iancu), Richard Revels, Daniel-Constantin Mierla (@miconda), Konstantin Bokarius, Edson Gellert Schubert, Henning Westerholt (@henningw), Klaus Darilion.

All documentation files (i.e. .md extension) are licensed under the Creative Common License 4.0