Verify that in the python virtualenv, the netdiff module has this file: https://github.com/openwisp/netdiff/blob/master/netdiff/parsers/zerotier.py
with --force-reinstall --no-cache cd /opt/openwisp2 source bin/env/activate pip install --force-reinstall --no-cache https://github.com/openwisp/openwisp-network-topology/tarball/master https://github.com/openwisp/netdiff/tarball/master Best regards *Federico Capoano* OpenWISP OÜ Harjumaa, Tallinn, Sepapaja tn 6, 15551 VAT: EE101989729 *openwisp.io* <http://openwisp.io> On Thu, 16 Nov 2023 at 17:47, Michele Salerno <[email protected]> wrote: > I have rebooted the server but the error is still the same. > > root@controller:opt # tail /opt/openwisp2/log/openwisp2.log > > diff = self.diff(data) > > File > "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", > line 140, in diff > > if isinstance(data, self.parser_class): > > File > "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/functional.py", > line 57, in __get__ > > res = instance.__dict__[self.name] = self.func(instance) > > File > "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", > line 105, in parser_class > > return import_string(self.parser) > > File > "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/module_loading.py", > line 32, in import_string > > raise ImportError( > > ImportError: Module "netdiff" does not define a "ZeroTierParser" > attribute/class > > root@controller:opt # > > > > Il 15/11/23 22:17, Federico Capoano ha scritto: > > Restart the openwisp processes with: > > supervisorctl restart all > > F. > > On Wed, 15 Nov 2023 at 15:57, Michele Salerno <[email protected]> wrote: > >> I try but source env/bin.. >> this is the error when run the script >> >> root@controller:opt # tail /opt/openwisp2/log/openwisp2.log >> >> diff = self.diff(data) >> >> File >> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", >> line 140, in diff >> >> if isinstance(data, self.parser_class): >> >> File >> "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/functional.py", >> line 57, in __get__ >> >> res = instance.__dict__[self.name] = self.func(instance) >> >> File >> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", >> line 105, in parser_class >> >> return import_string(self.parser) >> >> File >> "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/module_loading.py", >> line 32, in import_string >> >> raise ImportError( >> >> ImportError: Module "netdiff" does not define a "ZeroTierParser" >> attribute/class >> >> root@controller:opt # >> >> >> Il 15/11/23 12:20, Federico Capoano ha scritto: >> >> Try this: >> >> cd /opt/openwisp2 >> source bin/env/activate >> pip install >> https://github.com/openwisp/openwisp-network-topology/tarball/master >> pip install https://github.com/openwisp/netdiff/tarball/master >> >> Federico >> >> >> On Tue, 14 Nov 2023 at 18:04, Michele Salerno <[email protected]> >> wrote: >> >>> root@controller:~ # pip install >>> https://github.com/openwisp/netdiff/tarball/master >>> >>> Traceback (most recent call last): >>> >>> File "/usr/bin/pip", line 33, in <module> >>> >>> sys.exit(load_entry_point('pip==20.3.4', 'console_scripts', 'pip')()) >>> >>> File "/usr/bin/pip", line 25, in importlib_load_entry_point >>> >>> return next(matches).load() >>> >>> File "/usr/lib/python3.9/importlib/metadata.py", line 77, in load >>> >>> module = import_module(match.group('module')) >>> >>> File "/usr/lib/python3.9/importlib/__init__.py", line 127, in >>> import_module >>> >>> return _bootstrap._gcd_import(name[level:], package, level) >>> >>> File "<frozen importlib._bootstrap>", line 1030, in _gcd_import >>> >>> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load >>> >>> File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked >>> >>> File "<frozen importlib._bootstrap>", line 680, in _load_unlocked >>> >>> File "<frozen importlib._bootstrap_external>", line 790, in exec_module >>> >>> File "<frozen importlib._bootstrap>", line 228, in >>> _call_with_frames_removed >>> >>> File "/usr/lib/python3/dist-packages/pip/_internal/cli/main.py", line 10, >>> in <module> >>> >>> from pip._internal.cli.autocompletion import autocomplete >>> >>> File >>> "/usr/lib/python3/dist-packages/pip/_internal/cli/autocompletion.py", line >>> 9, in <module> >>> >>> from pip._internal.cli.main_parser import create_main_parser >>> >>> File "/usr/lib/python3/dist-packages/pip/_internal/cli/main_parser.py", >>> line 7, in <module> >>> >>> from pip._internal.cli import cmdoptions >>> >>> File "/usr/lib/python3/dist-packages/pip/_internal/cli/cmdoptions.py", >>> line 23, in <module> >>> >>> from pip._vendor.packaging.utils import canonicalize_name >>> >>> File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 94, >>> in <module> >>> >>> vendored("requests.packages.urllib3.contrib.pyopenssl") >>> >>> File "/usr/lib/python3/dist-packages/pip/_vendor/__init__.py", line 36, >>> in vendored >>> >>> __import__(modulename, globals(), locals(), level=0) >>> >>> File "<frozen importlib._bootstrap>", line 1007, in _find_and_load >>> >>> File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked >>> >>> File "<frozen importlib._bootstrap>", line 664, in _load_unlocked >>> >>> File "<frozen importlib._bootstrap>", line 627, in >>> _load_backward_compatible >>> >>> File "<frozen zipimport>", line 259, in load_module >>> >>> File >>> "/usr/share/python-wheels/urllib3-1.26.5-py2.py3-none-any.whl/urllib3/contrib/pyopenssl.py", >>> line 50, in <module> >>> >>> File "/usr/lib/python3/dist-packages/OpenSSL/__init__.py", line 8, in >>> <module> >>> >>> from OpenSSL import crypto, SSL >>> >>> File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1556, in >>> <module> >>> >>> class X509StoreFlags(object): >>> >>> File "/usr/lib/python3/dist-packages/OpenSSL/crypto.py", line 1577, in >>> X509StoreFlags >>> >>> CB_ISSUER_CHECK = _lib.X509_V_FLAG_CB_ISSUER_CHECK >>> >>> AttributeError: module 'lib' has no attribute 'X509_V_FLAG_CB_ISSUER_CHECK' >>> >>> >>> Il 14/11/23 21:23, Federico Capoano ha scritto: >>> >>> I think you need to upgrade your netdiff and network-topology modules to >>> the latest development version. >>> >>> F. >>> >>> On Tue, 14 Nov 2023 at 17:22, Michele Salerno <[email protected]> >>> wrote: >>> >>>> root@controller:openwisp2 # tail -f /opt/openwisp2/log/openwisp2.log >>>> >>>> option[selected]:not(option[selected] ~ option[selected]) ', ('Unknown >>>> pseudo-class', 'has') >>>> >>>> [WARNING 2023-11-14 20:20:02,730] module: __init__, process: 228744, >>>> thread: 140337855625024 >>>> >>>> Invalid or unsupported selector 'select:not(:has(option[selected])) >>>> option:first-of-type, >>>> >>>> option[selected]:not(option[selected] ~ option[selected]) ', ('Unknown >>>> pseudo-class', 'has') >>>> >>>> [WARNING 2023-11-14 20:20:02,743] module: __init__, process: 228742, >>>> thread: 139758430725952 >>>> >>>> Invalid or unsupported selector 'select:not(:has(option[selected])) >>>> option:first-of-type, >>>> >>>> option[selected]:not(option[selected] ~ option[selected]) ', ('Unknown >>>> pseudo-class', 'has') >>>> >>>> [ERROR 2023-11-14 20:21:00,924] module: log, process: 197536, thread: >>>> 140067354400576 >>>> >>>> Internal Server Error: >>>> /api/v1/network-topology/topology/2307fb3c-4035-4ee3-8868-f807339efb78/receive/ >>>> >>>> Traceback (most recent call last): >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/module_loading.py", >>>> line 30, in import_string >>>> >>>> return cached_import(module_path, class_name) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/module_loading.py", >>>> line 16, in cached_import >>>> >>>> return getattr(module, class_name) >>>> >>>> AttributeError: module 'netdiff' has no attribute 'ZeroTierParser' >>>> >>>> The above exception was the direct cause of the following exception: >>>> >>>> Traceback (most recent call last): >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/core/handlers/exception.py", >>>> line 55, in inner >>>> >>>> response = get_response(request) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/core/handlers/base.py", >>>> line 197, in _get_response >>>> >>>> response = wrapped_callback(request, *callback_args, **callback_kwargs) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/views/decorators/csrf.py", >>>> line 56, in wrapper_view >>>> >>>> return view_func(*args, **kwargs) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/views/generic/base.py", >>>> line 104, in view >>>> >>>> return self.dispatch(request, *args, **kwargs) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/rest_framework/views.py", >>>> line 509, in dispatch >>>> >>>> response = self.handle_exception(exc) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/rest_framework/views.py", >>>> line 469, in handle_exception >>>> >>>> self.raise_uncaught_exception(exc) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/rest_framework/views.py", >>>> line 480, in raise_uncaught_exception >>>> >>>> raise exc >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/rest_framework/views.py", >>>> line 506, in dispatch >>>> >>>> response = handler(request, *args, **kwargs) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/api/views.py", >>>> line 144, in post >>>> >>>> topology.receive(request.data) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", >>>> line 371, in receive >>>> >>>> self.update(data) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", >>>> line 314, in update >>>> >>>> diff = self.diff(data) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", >>>> line 140, in diff >>>> >>>> if isinstance(data, self.parser_class): >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/functional.py", >>>> line 57, in __get__ >>>> >>>> res = instance.__dict__[self.name] = self.func(instance) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/openwisp_network_topology/base/topology.py", >>>> line 105, in parser_class >>>> >>>> return import_string(self.parser) >>>> >>>> File >>>> "/opt/openwisp2/env/lib/python3.9/site-packages/django/utils/module_loading.py", >>>> line 32, in import_string >>>> >>>> raise ImportError( >>>> >>>> ImportError: Module "netdiff" does not define a "ZeroTierParser" >>>> attribute/class >>>> >>>> >>>> >>>> Il 14/11/23 21:17, Federico Capoano ha scritto: >>>> >>>> Please share the log output from /opt/openwisp2/log/openwisp2.log >>>> >>>> >>>> On Tue, 14 Nov 2023 at 14:45, Michele Salerno <[email protected]> >>>> wrote: >>>> >>>>> Hi, >>>>> >>>>> I followed the guide and everything works. >>>>> I only have one error in the topology, I created the script as >>>>> described in the guide >>>>> https://openwisp.io/docs/user/network-topology.html >>>>> >>>>> This is my output: >>>>> >>>>> root@controller:~ # /opt/send-zt-topology.sh >>>>> <!doctype html><html lang="en"><head><title>Server Error >>>>> (500)</title></head><body><h1>Server Error >>>>> (500)</h1><p></p></body></html>root@controller:~ # >>>>> >>>>> What could be the problem? >>>>> >>>>> Thanks. >>>>> >>>>> Beste regards, >>>>> >>>>> Michele Salerno >>>>> >>>>> >>>>> Il 11/10/23 17:17, Federico Capoano ha scritto: >>>>> >>>>> Hi everyone! >>>>> >>>>> I just wanted to let you know that I just finished merging the work to >>>>> integrate ZeroTier into the development version of OpenWISP, find more >>>>> information on how to set this up here: >>>>> https://openwisp.io/docs/user/zerotier.html >>>>> >>>>> This feature will be shipped in the next release, if you want to try >>>>> it before then you can do so by deploying the development version of >>>>> OpenWISP, to do that you need to use the latest master of the >>>>> ansible-openwisp2 <https://github.com/openwisp/ansible-openwisp2> >>>>> role. >>>>> >>>>> Many thanks to Aryaman for working on this during the last Google >>>>> Summer of Code under the guidance of Gagan Deep, Ajay Tripathi and myself. >>>>> >>>>> I am proud of the result we have achieved, as the first iteration I >>>>> think it's really good. >>>>> >>>>> I am eager to see this work deployed all around the world! >>>>> >>>>> Best regards >>>>> Federico Capoano >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "OpenWISP" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To view this discussion on the web, visit >>>>> https://groups.google.com/d/msgid/openwisp/CAAGgX6%2B8%3DHk41uALBvPei6D7EhgjLKPaDzCYZhXz%3DUf0O5AuUA%40mail.gmail.com >>>>> <https://groups.google.com/d/msgid/openwisp/CAAGgX6%2B8%3DHk41uALBvPei6D7EhgjLKPaDzCYZhXz%3DUf0O5AuUA%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>>> -- >>>>> Informativa Privacy - Ai sensi del D. Lgs n. 196/2003 (Codice Privacy) si >>>>> precisa che le informazioni contenute in questo messaggio sono riservate >>>>> e ad uso esclusivo del destinatario. Qualora il messaggio in parola Le >>>>> fosse pervenuto per errore, La preghiamo di eliminarlo senza copiarlo e >>>>> di non inoltrarlo a terzi, dandocene gentilmente comunicazione. Grazie. >>>>> >>>>> Privacy Information - This message, for the D. Lgs n. 196/2003 (Privacy >>>>> Code), may contain confidential and/or privileged information. If you are >>>>> not the addressee or authorized to receive this for the addressee, you >>>>> must not use, copy, disclose or take any action based on this message or >>>>> any information herein. If you have received this message in error, >>>>> please advise the sender immediately by reply e-mail and delete this >>>>> message. Thank you for your cooperation. >>>>> >>>>> -- >>>>> You received this message because you are subscribed to the Google >>>>> Groups "OpenWISP" group. >>>>> To unsubscribe from this group and stop receiving emails from it, send >>>>> an email to [email protected]. >>>>> To view this discussion on the web, visit >>>>> https://groups.google.com/d/msgid/openwisp/7324e74a-5c81-426a-92d4-476ad5b0215c%40gmail.com >>>>> <https://groups.google.com/d/msgid/openwisp/7324e74a-5c81-426a-92d4-476ad5b0215c%40gmail.com?utm_medium=email&utm_source=footer> >>>>> . >>>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "OpenWISP" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web, visit >>>> https://groups.google.com/d/msgid/openwisp/CAAGgX6JENTteFxXzoZswqjPHtbooePxfg1cDn4Xm5S9T5UkAhw%40mail.gmail.com >>>> <https://groups.google.com/d/msgid/openwisp/CAAGgX6JENTteFxXzoZswqjPHtbooePxfg1cDn4Xm5S9T5UkAhw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>>> -- >>>> Informativa Privacy - Ai sensi del D. Lgs n. 196/2003 (Codice Privacy) si >>>> precisa che le informazioni contenute in questo messaggio sono riservate e >>>> ad uso esclusivo del destinatario. Qualora il messaggio in parola Le fosse >>>> pervenuto per errore, La preghiamo di eliminarlo senza copiarlo e di non >>>> inoltrarlo a terzi, dandocene gentilmente comunicazione. Grazie. >>>> >>>> Privacy Information - This message, for the D. Lgs n. 196/2003 (Privacy >>>> Code), may contain confidential and/or privileged information. If you are >>>> not the addressee or authorized to receive this for the addressee, you >>>> must not use, copy, disclose or take any action based on this message or >>>> any information herein. If you have received this message in error, please >>>> advise the sender immediately by reply e-mail and delete this message. >>>> Thank you for your cooperation. >>>> >>>> -- >>>> You received this message because you are subscribed to the Google >>>> Groups "OpenWISP" group. >>>> To unsubscribe from this group and stop receiving emails from it, send >>>> an email to [email protected]. >>>> To view this discussion on the web, visit >>>> https://groups.google.com/d/msgid/openwisp/d63f9c92-01e3-444a-ae18-12389fbb757a%40gmail.com >>>> <https://groups.google.com/d/msgid/openwisp/d63f9c92-01e3-444a-ae18-12389fbb757a%40gmail.com?utm_medium=email&utm_source=footer> >>>> . >>>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "OpenWISP" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web, visit >>> https://groups.google.com/d/msgid/openwisp/CAAGgX6KrJGiY6tZFNCiC7Xy8S8eSzd1EB0HN9dp%3DSMbqRhypOw%40mail.gmail.com >>> <https://groups.google.com/d/msgid/openwisp/CAAGgX6KrJGiY6tZFNCiC7Xy8S8eSzd1EB0HN9dp%3DSMbqRhypOw%40mail.gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >>> -- >>> Informativa Privacy - Ai sensi del D. Lgs n. 196/2003 (Codice Privacy) si >>> precisa che le informazioni contenute in questo messaggio sono riservate e >>> ad uso esclusivo del destinatario. Qualora il messaggio in parola Le fosse >>> pervenuto per errore, La preghiamo di eliminarlo senza copiarlo e di non >>> inoltrarlo a terzi, dandocene gentilmente comunicazione. Grazie. >>> >>> Privacy Information - This message, for the D. Lgs n. 196/2003 (Privacy >>> Code), may contain confidential and/or privileged information. If you are >>> not the addressee or authorized to receive this for the addressee, you must >>> not use, copy, disclose or take any action based on this message or any >>> information herein. If you have received this message in error, please >>> advise the sender immediately by reply e-mail and delete this message. >>> Thank you for your cooperation. >>> >>> -- >>> You received this message because you are subscribed to the Google >>> Groups "OpenWISP" group. >>> To unsubscribe from this group and stop receiving emails from it, send >>> an email to [email protected]. >>> To view this discussion on the web, visit >>> https://groups.google.com/d/msgid/openwisp/e271851a-14c2-440b-b991-1664a2e97dbc%40gmail.com >>> <https://groups.google.com/d/msgid/openwisp/e271851a-14c2-440b-b991-1664a2e97dbc%40gmail.com?utm_medium=email&utm_source=footer> >>> . >>> >> -- >> You received this message because you are subscribed to the Google Groups >> "OpenWISP" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web, visit >> https://groups.google.com/d/msgid/openwisp/CAAGgX6%2BEAzzKHELSoGLTeF2sA4_b-GE2fpcMvpAD6her%3DJ9Wjw%40mail.gmail.com >> <https://groups.google.com/d/msgid/openwisp/CAAGgX6%2BEAzzKHELSoGLTeF2sA4_b-GE2fpcMvpAD6her%3DJ9Wjw%40mail.gmail.com?utm_medium=email&utm_source=footer> >> . >> >> -- >> Informativa Privacy - Ai sensi del D. Lgs n. 196/2003 (Codice Privacy) si >> precisa che le informazioni contenute in questo messaggio sono riservate e >> ad uso esclusivo del destinatario. Qualora il messaggio in parola Le fosse >> pervenuto per errore, La preghiamo di eliminarlo senza copiarlo e di non >> inoltrarlo a terzi, dandocene gentilmente comunicazione. Grazie. >> >> Privacy Information - This message, for the D. Lgs n. 196/2003 (Privacy >> Code), may contain confidential and/or privileged information. If you are >> not the addressee or authorized to receive this for the addressee, you must >> not use, copy, disclose or take any action based on this message or any >> information herein. If you have received this message in error, please >> advise the sender immediately by reply e-mail and delete this message. Thank >> you for your cooperation. >> >> -- >> You received this message because you are subscribed to the Google Groups >> "OpenWISP" group. >> To unsubscribe from this group and stop receiving emails from it, send an >> email to [email protected]. >> To view this discussion on the web, visit >> https://groups.google.com/d/msgid/openwisp/19630920-9c33-47c0-9e77-936b3fd1f0f9%40gmail.com >> <https://groups.google.com/d/msgid/openwisp/19630920-9c33-47c0-9e77-936b3fd1f0f9%40gmail.com?utm_medium=email&utm_source=footer> >> . >> > -- > You received this message because you are subscribed to the Google Groups > "OpenWISP" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web, visit > https://groups.google.com/d/msgid/openwisp/CAAGgX6JzuR%3D%2BjZT7FQz%2BcVmMX97G2zRDxpqt3Shkz2Z6UCMOPA%40mail.gmail.com > <https://groups.google.com/d/msgid/openwisp/CAAGgX6JzuR%3D%2BjZT7FQz%2BcVmMX97G2zRDxpqt3Shkz2Z6UCMOPA%40mail.gmail.com?utm_medium=email&utm_source=footer> > . > > -- > Informativa Privacy - Ai sensi del D. Lgs n. 196/2003 (Codice Privacy) si > precisa che le informazioni contenute in questo messaggio sono riservate e ad > uso esclusivo del destinatario. Qualora il messaggio in parola Le fosse > pervenuto per errore, La preghiamo di eliminarlo senza copiarlo e di non > inoltrarlo a terzi, dandocene gentilmente comunicazione. Grazie. > > Privacy Information - This message, for the D. Lgs n. 196/2003 (Privacy > Code), may contain confidential and/or privileged information. If you are not > the addressee or authorized to receive this for the addressee, you must not > use, copy, disclose or take any action based on this message or any > information herein. If you have received this message in error, please advise > the sender immediately by reply e-mail and delete this message. Thank you for > your cooperation. > > -- > You received this message because you are subscribed to the Google Groups > "OpenWISP" group. > To unsubscribe from this group and stop receiving emails from it, send an > email to [email protected]. > To view this discussion on the web, visit > https://groups.google.com/d/msgid/openwisp/e5b75e1e-459a-4037-b478-6a483d0f85f9%40gmail.com > <https://groups.google.com/d/msgid/openwisp/e5b75e1e-459a-4037-b478-6a483d0f85f9%40gmail.com?utm_medium=email&utm_source=footer> > . > -- You received this message because you are subscribed to the Google Groups "OpenWISP" group. To unsubscribe from this group and stop receiving emails from it, send an email to [email protected]. To view this discussion on the web, visit https://groups.google.com/d/msgid/openwisp/CAAGgX6LqOMmv5RcRiPPVOWM80v5hS%2B_Lpp5tyUq8Y7m_35dcEg%40mail.gmail.com.
