Hi Everyone.
I have a plan to share an old project that I started few years months or year ago. My SNMP module.
A module configuring the SNMP with Asterisk / Digium MIBS.
Hi Everyone.
I have a plan to share an old project that I started few years months or year ago. My SNMP module.
A module configuring the SNMP with Asterisk / Digium MIBS.
What data is being set up to be scraped and how is it different from the prometheus module in Asterisk?
I don’t know prometeus. but I think you know what the SNMP is used with Asterisk. So, if someone would play with SNMP, this module is here starting SNMP tools for asterisk. That’s it.
On this forum, I saw someone showing how to configure the SNMP on FreePBX manually. I thought that was a good idea. As I started this project before to see it, I’m almost ready to share.
OK but what types of data will this expose? That was my main question. Or is it just a SNMP Walk to get oids?
You can get the version, the number of calls …Etc.
Walk to get oids, yes indeed.
On my test I’m using this kind of cmd line:
snmpwalk -v3 -a SHA -A xxxxxxxxxx -x AES -X xxxxxxxxxx -l authPriv -u test 192.168.10.x ASTERISK-MIB::astVersionString
ASTERISK-MIB DEFINITIONS ::= BEGIN
IMPORTS
OBJECT-TYPE, MODULE-IDENTITY, Integer32, Counter32, TimeTicks,
Unsigned32, Gauge32
FROM SNMPv2-SMI
TEXTUAL-CONVENTION, DisplayString, TruthValue
FROM SNMPv2-TC
digium
FROM DIGIUM-MIB;
asterisk MODULE-IDENTITY
LAST-UPDATED "200806202025Z"
ORGANIZATION "Digium, Inc."
CONTACT-INFO
"Mark A. Spencer
Postal: Digium, Inc.
445 Jan Davis Drive
Huntsville, AL 35806
USA
Tel: +1 256 428 6000
Email: [email protected]
Thorsten Lockert
Postal: Voop AS
Boehmergaten 42
NO-5057 Bergen
Norway
Tel: +47 5598 7200
Email: [email protected]"
DESCRIPTION
"Asterisk is an Open Source PBX. This MIB defined
objects for managing Asterisk instances."
REVISION "200806202025Z"
DESCRIPTION
"smilint police --
Add missing imports; fix initial capitalization
of enumeration elements; add missing range
restrictions for Integer32 indices, correct
spelling of astChanCidANI in its definition.
Addresses bug 12905. - [email protected]"
REVISION "200708211450Z"
DESCRIPTION
"Add total and current call counter statistics."
REVISION "200603061840Z"
DESCRIPTION
"Change audio codec identification from 3kAudio to
Audio3k to conform better with specification.
Expand on contact information."
REVISION "200602041900Z"
DESCRIPTION
"Initial published revision."
::= { digium 1 }
asteriskVersion OBJECT IDENTIFIER ::= { asterisk 1 }
asteriskConfiguration OBJECT IDENTIFIER ::= { asterisk 2 }
asteriskModules OBJECT IDENTIFIER ::= { asterisk 3 }
asteriskIndications OBJECT IDENTIFIER ::= { asterisk 4 }
asteriskChannels OBJECT IDENTIFIER ::= { asterisk 5 }
-- asteriskVersion
astVersionString OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Text version string of the version of Asterisk that
the SNMP Agent was compiled to run against."
::= { asteriskVersion 1 }
astVersionTag OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"SubVersion revision of the version of Asterisk that
the SNMP Agent was compiled to run against -- this is
typically 0 for release-versions of Asterisk."
::= { asteriskVersion 2 }
-- asteriskConfiguration
astConfigUpTime OBJECT-TYPE
SYNTAX TimeTicks
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Time ticks since Asterisk was started."
::= { asteriskConfiguration 1 }
astConfigReloadTime OBJECT-TYPE
SYNTAX TimeTicks
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Time ticks since Asterisk was last reloaded."
::= { asteriskConfiguration 2 }
astConfigPid OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The process id of the running Asterisk process."
::= { asteriskConfiguration 3 }
astConfigSocket OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The control socket for giving Asterisk commands."
::= { asteriskConfiguration 4 }
astConfigCallsActive OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The number of calls currently active on the Asterisk PBX."
::= { asteriskConfiguration 5 }
astConfigCallsProcessed OBJECT-TYPE
SYNTAX Counter32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"The total number of calls processed through the Asterisk PBX since last
restart."
::= { asteriskConfiguration 6 }
-- asteriskModules
astNumModules OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of modules currently loaded into Asterisk."
::= { asteriskModules 1 }
-- asteriskIndications
astNumIndications OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of indications currently defined in Asterisk."
::= { asteriskIndications 1 }
astCurrentIndication OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Default indication zone to use."
::= { asteriskIndications 2 }
astIndicationsTable OBJECT-TYPE
SYNTAX SEQUENCE OF AstIndicationsEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Table with all the indication zones currently know to
the running Asterisk instance."
::= { asteriskIndications 3 }
astIndicationsEntry OBJECT-TYPE
SYNTAX AstIndicationsEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Information about a single indication zone."
INDEX { astIndIndex }
::= { astIndicationsTable 1 }
AstIndicationsEntry ::= SEQUENCE {
astIndIndex Integer32,
astIndCountry DisplayString,
astIndAlias DisplayString,
astIndDescription DisplayString
}
astIndIndex OBJECT-TYPE
SYNTAX Integer32 (1 .. 2147483647)
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Numerical index into the table of indication zones."
::= { astIndicationsEntry 1 }
astIndCountry OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Country for which the indication zone is valid,
typically this is the ISO 2-letter code of the country."
::= { astIndicationsEntry 2 }
astIndAlias OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
""
::= { astIndicationsEntry 3 }
astIndDescription OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Description of the indication zone, usually the full
name of the country it is valid for."
::= { astIndicationsEntry 4 }
-- asteriskChannels
astNumChannels OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current number of active channels."
::= { asteriskChannels 1 }
astChanTable OBJECT-TYPE
SYNTAX SEQUENCE OF AstChanEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Table with details of the currently active channels
in the Asterisk instance."
::= { asteriskChannels 2 }
astChanEntry OBJECT-TYPE
SYNTAX AstChanEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Details of a single channel."
INDEX { astChanIndex }
::= { astChanTable 1 }
AstChanEntry ::= SEQUENCE {
astChanIndex Integer32,
astChanName DisplayString,
astChanLanguage DisplayString,
astChanType DisplayString,
astChanMusicClass DisplayString,
astChanBridge DisplayString,
astChanMasq DisplayString,
astChanMasqr DisplayString,
astChanWhenHangup TimeTicks,
astChanApp DisplayString,
astChanData DisplayString,
astChanContext DisplayString,
astChanMacroContext DisplayString,
astChanMacroExten DisplayString,
astChanMacroPri Integer32,
astChanExten DisplayString,
astChanPri Integer32,
astChanAccountCode DisplayString,
astChanForwardTo DisplayString,
astChanUniqueId DisplayString,
astChanCallGroup Unsigned32,
astChanPickupGroup Unsigned32,
astChanState INTEGER,
astChanMuted TruthValue,
astChanRings Integer32,
astChanCidDNID DisplayString,
astChanCidNum DisplayString,
astChanCidName DisplayString,
astChanCidANI DisplayString,
astChanCidRDNIS DisplayString,
astChanCidPresentation DisplayString,
astChanCidANI2 Integer32,
astChanCidTON Integer32,
astChanCidTNS Integer32,
astChanAMAFlags INTEGER,
astChanADSI INTEGER,
astChanToneZone DisplayString,
astChanHangupCause INTEGER,
astChanVariables DisplayString,
astChanFlags BITS,
astChanTransferCap INTEGER
}
astChanIndex OBJECT-TYPE
SYNTAX Integer32 (1 .. 2147483647)
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Index into the channel table."
::= { astChanEntry 1 }
astChanName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Name of the current channel."
::= { astChanEntry 2 }
astChanLanguage OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Which language the current channel is configured to
use -- used mainly for prompts."
::= { astChanEntry 3 }
astChanType OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Underlying technology for the current channel."
::= { astChanEntry 4 }
astChanMusicClass OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Music class to be used for Music on Hold for this
channel."
::= { astChanEntry 5 }
astChanBridge OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Which channel this channel is currently bridged (in a
conversation) with."
::= { astChanEntry 6 }
astChanMasq OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Channel masquerading for us."
::= { astChanEntry 7 }
astChanMasqr OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Channel we are masquerading for."
::= { astChanEntry 8 }
astChanWhenHangup OBJECT-TYPE
SYNTAX TimeTicks
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"How long until this channel will be hung up."
::= { astChanEntry 9 }
astChanApp OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current application for the channel."
::= { astChanEntry 10 }
astChanData OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Arguments passed to the current application."
::= { astChanEntry 11 }
astChanContext OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current extension context."
::= { astChanEntry 12 }
astChanMacroContext OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current macro context."
::= { astChanEntry 13 }
astChanMacroExten OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current macro extension."
::= { astChanEntry 14 }
astChanMacroPri OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current macro priority."
::= { astChanEntry 15 }
astChanExten OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current extension."
::= { astChanEntry 16 }
astChanPri OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Current priority."
::= { astChanEntry 17 }
astChanAccountCode OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Account Code for billing."
::= { astChanEntry 18 }
astChanForwardTo OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Where to forward to if asked to dial on this
interface."
::= { astChanEntry 19 }
astChanUniqueId OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Unique Channel Identifier."
::= { astChanEntry 20 }
astChanCallGroup OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Call Group."
::= { astChanEntry 21 }
astChanPickupGroup OBJECT-TYPE
SYNTAX Unsigned32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Pickup Group."
::= { astChanEntry 22 }
astChanState OBJECT-TYPE
SYNTAX INTEGER {
stateDown(0),
stateReserved(1),
stateOffHook(2),
stateDialing(3),
stateRing(4),
stateRinging(5),
stateUp(6),
stateBusy(7),
stateDialingOffHook(8),
statePreRing(9)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Channel state."
::= { astChanEntry 23 }
astChanMuted OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Transmission of voice data has been muted."
::= { astChanEntry 24 }
astChanRings OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of rings so far."
::= { astChanEntry 25 }
astChanCidDNID OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Dialled Number ID."
::= { astChanEntry 26 }
astChanCidNum OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Caller Number."
::= { astChanEntry 27 }
astChanCidName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Caller Name."
::= { astChanEntry 28 }
astChanCidANI OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"ANI"
::= { astChanEntry 29 }
astChanCidRDNIS OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Redirected Dialled Number Service."
::= { astChanEntry 30 }
astChanCidPresentation OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number Presentation/Screening."
::= { astChanEntry 31 }
astChanCidANI2 OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"ANI 2 (info digit)."
::= { astChanEntry 32 }
astChanCidTON OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Type of Number."
::= { astChanEntry 33 }
astChanCidTNS OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Transit Network Select."
::= { astChanEntry 34 }
astChanAMAFlags OBJECT-TYPE
SYNTAX INTEGER {
default(0),
omit(1),
billing(2),
documentation(3)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"AMA Flags."
::= { astChanEntry 35 }
astChanADSI OBJECT-TYPE
SYNTAX INTEGER {
unknown(0),
available(1),
unavailable(2),
offHookOnly(3)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Whether or not ADSI is detected on CPE."
::= { astChanEntry 36 }
astChanToneZone OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Indication zone to use for channel."
::= { astChanEntry 37 }
astChanHangupCause OBJECT-TYPE
SYNTAX INTEGER {
notDefined(0),
unregistered(3),
normal(16),
busy(17),
noAnswer(19),
congestion(34),
failure(38),
noSuchDriver(66)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Why is the channel hung up."
::= { astChanEntry 38 }
astChanVariables OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Channel Variables defined for this channel."
::= { astChanEntry 39 }
astChanFlags OBJECT-TYPE
SYNTAX BITS {
wantsJitter(0),
deferDTMF(1),
writeInterrupt(2),
blocking(3),
zombie(4),
exception(5),
musicOnHold(6),
spying(7),
nativeBridge(8),
autoIncrementingLoop(9)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Flags set on this channel."
::= { astChanEntry 40 }
astChanTransferCap OBJECT-TYPE
SYNTAX INTEGER {
speech(0),
digital(8),
restrictedDigital(9),
audio3k(16),
digitalWithTones(17),
video(24)
}
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Transfer Capabilities for this channel."
::= { astChanEntry 41 }
astNumChanTypes OBJECT-TYPE
SYNTAX Integer32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of channel types (technologies) supported."
::= { asteriskChannels 3 }
astChanTypeTable OBJECT-TYPE
SYNTAX SEQUENCE OF AstChanTypeEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Table with details of the supported channel types."
::= { asteriskChannels 4 }
astChanTypeEntry OBJECT-TYPE
SYNTAX AstChanTypeEntry
MAX-ACCESS not-accessible
STATUS current
DESCRIPTION
"Information about a technology we support, including
how many channels are currently using this technology."
INDEX { astChanTypeIndex }
::= { astChanTypeTable 1 }
AstChanTypeEntry ::= SEQUENCE {
astChanTypeIndex Integer32,
astChanTypeName DisplayString,
astChanTypeDesc DisplayString,
astChanTypeDeviceState Integer32,
astChanTypeIndications Integer32,
astChanTypeTransfer Integer32,
astChanTypeChannels Gauge32
}
astChanTypeIndex OBJECT-TYPE
SYNTAX Integer32 (1 .. 2147483647)
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Index into the table of channel types."
::= { astChanTypeEntry 1 }
astChanTypeName OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Unique name of the technology we are describing."
::= { astChanTypeEntry 2 }
astChanTypeDesc OBJECT-TYPE
SYNTAX DisplayString
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Description of the channel type (technology)."
::= { astChanTypeEntry 3 }
astChanTypeDeviceState OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Whether the current technology can hold device states."
::= { astChanTypeEntry 4 }
astChanTypeIndications OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Whether the current technology supports progress indication."
::= { astChanTypeEntry 5 }
astChanTypeTransfer OBJECT-TYPE
SYNTAX TruthValue
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Whether the current technology supports transfers, where
Asterisk can get out from inbetween two bridged channels."
::= { astChanTypeEntry 6 }
astChanTypeChannels OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of active channels using the current technology."
::= { astChanTypeEntry 7 }
astChanScalars OBJECT IDENTIFIER ::= { asteriskChannels 5 }
astNumChanBridge OBJECT-TYPE
SYNTAX Gauge32
MAX-ACCESS read-only
STATUS current
DESCRIPTION
"Number of channels currently in a bridged state."
::= { astChanScalars 1 }
END
Are you using res_snmp for this?
Yes
laruche*CLI> module show like res_snmp.so
Module Description Use Count Status Support Level
res_snmp.so SNMP [Sub]Agent for Asterisk 0 Running extended
Installing asteriskXX-snmp package
You may want to reconsider the use of res_snmp. I did some double checking to confirm my suspicions and res_snmp hasn’t been touched in almost a decade (hasn’t been touched since Asterisk v15, so 7 major releases). The only update it has had in the last three years was to remove app_macro references from it.
In fact at AstiDevCon 2025 it is part of the potential modules for deprecation and removal:
- What should be deprecated from the current code base?
- Nothing currently on the list…
- Possible options:
res_xmppH323res_snmp
SNMP is absolutely ancient as far as monitoring protocols go and what I am wondering is what monitoring system you would be using where SNMP would be preferred.
SNMP is still the goto for pretty much everything. Devices still ship with SNMP support and also all the major monitoring software and services still use it along with more current options like APIs, Netconf, etc.
OSS or Free (not complete):
Commercial (not complete):
Yes, it’s been around forever but at this time it is the most universal method for monitoring services like this. Just because your monitoring systems has APIs or some sort of streaming telemetry (like MQTT) doesn’t mean the devices or systems being monitored support them like they would SNMP.
No idea what you are talking about Tom. Just because these tools support SNMP does not make it the “goto for pretty much everything.” It makes it a least-common-denominator. I use Zabbix and yes it supports SNMP but it also supports much more feature-rich protocols and lightweight server agents which are a better choice for almost everything except older network gear. Services that expose a monitoring/statistics API are going to do it better than SNMP.
If Asterisk supported the sending of SNMP traps it might have a small advantage in alerting on critical events but it doesn’t even have that.
Sorry my mistake, Bill. I should have said least-common-denominator, however, my statement is still pretty accurate. Pretty much all devices, OSes, etc ship with SNMP support. Certain things may also ship with other support such as APIs or streaming telemetry but that’s never a guarantee. So the default goto, i.e. the least-common-denominator, is still SNMP for things.
Yes, the agents are very nice and very robust as long as the device/system support the agent. I also prefer things like APIs, etc for certain monitoring but since SNMP is L.C.D and widely supported, I still use that as well.
However, we are getting off track here. I was pointing out that creating a SNMP module for FreePBX based on the res_snmp Asterisk module may not be the best option since res_snmp hasn’t been touched in 8+ years and it was put on the suggestion list to be considered for deprecation and removal. It would really suck to do the work on this module only for it to be useless in the next 5 years or so because res_snmp was removed from future versions.
SNMP is still a standard indeed. I didn’t know snmp will be stopped in the feature. Maybe it’s a bad idea.
Anyway, we can keep the old asterisk version using snmp too.
I don’t know why the asterisk dev team would like to stop its dev. FreePBX is a server and it should provide everything regarding tools. Some UPS use it again today.
If there is nothing else monitoring FreePBX, then why?
The question about deprecating it wasn’t raised by the Asterisk team. It was raised by a community member during the AstriDevCon event. Deprecation has not been formally proposed as of this time.
Anyone is free to work on it or submit PRs, but noone has in years upon years.
Well, this module might be enough for everyone without update.
Thank you mate for your best effort. Could you pls also add here, If someone interested to have it Download and installation steps.
Hi.
I will do later. For now, I’m testing it locally. There is some stuff to fixe yet. for example, I’d like this module will be compatible for 16 & 17 with the same code.
Today, it’s only for 16.
Also I need ask @kgupta to create a new git branch.
This topic was automatically closed 31 days after the last reply. New replies are no longer allowed.