Loading .gitignore +3 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ checksums.txt .pydevproject .settings #vscode .vscode #local stuff files that end in ".local" or "tmp" or folders called "local" or "tmp" *.local *.tmp Loading magma/hackfest_magma-agw-enb_vnfd/charms/enodeb/actions.yaml +7 −10 Original line number Diff line number Diff line Loading @@ -17,15 +17,8 @@ register: - mme-addr - gtp-bind-addr - s1c-bind-addr kill-pid: description: "Kill PID." params: pid: description: "PID." type: string default: "" required: - pid unregister: description: "Unregister from AGW." attach-ue: description: Attach User Emulator to enodeB params: Loading @@ -45,3 +38,7 @@ attach-ue: - usim-imsi - usim-k - usim-opc detach-ue: description: "Detach from AGW." remove-default-gw: description: "Remove default gateway" No newline at end of file magma/hackfest_magma-agw-enb_vnfd/charms/enodeb/src/charm.py +54 −14 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import sys sys.path.append("lib") from ops.charm import CharmBase from ops.framework import StoredState Loading @@ -34,6 +35,7 @@ logger = logging.getLogger(__name__) class EnodebCharm(CharmBase): state = StoredState() def __init__(self, *args): super().__init__(*args) # An example of setting charm state Loading @@ -49,17 +51,22 @@ class EnodebCharm(CharmBase): self.on.upgrade_charm, self.on.register_action, self.on.attach_ue_action, self.on.kill_pid_action, self.on.unregister_action, self.on.detach_ue_action, self.on.remove_default_gw, ): self.framework.observe(event, self) def on_config_changed(self, event): """Handle changes in configuration""" unit = self.model.unit def on_install(self, event): """Called when the charm is being installed""" unit = self.model.unit # Install your software and its dependencies unit.status = ActiveStatus() def on_upgrade_charm(self, event): """Upgrade the charm.""" unit = self.model.unit Loading @@ -68,6 +75,7 @@ class EnodebCharm(CharmBase): self.on_install(event) # When maintenance is done, return to an Active state unit.status = ActiveStatus() def on_register_action(self, event): """Register to AGW (EPC).""" try: Loading @@ -89,7 +97,7 @@ class EnodebCharm(CharmBase): "--enb_files.drb_config=/configzmq/drb.conf", "/configzmq/enb.conf", "--rf.device_name=zmq", "--rf.device_args='fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6'" "--rf.device_args='fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6'", ] ) logger.debug("Register action: executing") Loading @@ -104,24 +112,24 @@ class EnodebCharm(CharmBase): event.fail("Timeout error") except Exception as e: event.fail(e) def on_kill_pid_action(self, event): """Kill PID""" def on_unregister_action(self, event): """Unregister action""" try: pid = event.params["pid"] command = "kill -9 {}".format(pid) subprocess.check_output(command, shell=True) command = "sudo killall -s KILL srsenb" output = subprocess.check_output(command, shell=True) event.set_results( {"status": "ok", "pid": pid, "message": "PID {} killed".format(pid)} { "status": "ok", "message": "Unregistered successfully", "output": output, } ) except subprocess.CalledProcessError as e: event.fail("Command error: {}".format(e.output)) except Exception as e: event.fail(e) def _run_daemon(self, cmd, stdout_file): with open(stdout_file, "wb") as f: return subprocess.Popen(cmd, shell=True, stdout=f) def on_attach_ue_action(self, event): """Attach User Emulator to EnodeB.""" try: Loading @@ -140,7 +148,7 @@ class EnodebCharm(CharmBase): "--nas.apn=oai.ipv4", "--rf.device_name=zmq", "--rf.device_args='tx_port=tcp://*:2001,rx_port=tcp://localhost:2000,id=ue,base_srate=23.04e6'", "/configzmq/ue.conf" "/configzmq/ue.conf", ] ) logger.debug("Attach UE action: executing") Loading @@ -151,5 +159,37 @@ class EnodebCharm(CharmBase): ) except subprocess.CalledProcessError as ex: event.fail(ex) def on_detach_ue_action(self, event): """Detach UE action""" try: command = "sudo killall -s KILL srsue" output = subprocess.check_output(command, shell=True) event.set_results( {"status": "ok", "message": "Detached successfully", "output": output} ) except subprocess.CalledProcessError as e: event.fail("Command error: {}".format(e.output)) except Exception as e: event.fail(e) def remove_default_gw(self, event): """Remove default gw""" try: command = "sudo route del default" output = subprocess.check_output(command, shell=True) event.set_results( {"status": "ok", "message": "Default route removed!", "output": output} ) except subprocess.CalledProcessError as e: event.fail("Command error: {}".format(e.output)) except Exception as e: event.fail(e) def _run_daemon(self, cmd, stdout_file): with open(stdout_file, "wb") as f: return subprocess.Popen(cmd, shell=True, stdout=f) if __name__ == "__main__": main(EnodebCharm) magma/hackfest_magma-agw-enb_vnfd/magma-agw-enb_vnfd.yaml +5 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,9 @@ vnfd:vnfd-catalog: ssh-access: required: True default-user: ubuntu initial-config-primitive: - seq: '1' name: remove-default-gw config-primitive: - name: register parameter: Loading @@ -108,6 +111,8 @@ vnfd:vnfd-catalog: data-type: STRING - name: usim-opc data-type: STRING - name: unregister - name: detach-ue internal-vld: - id: internalS1 name: internalS1 Loading Loading
.gitignore +3 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,9 @@ checksums.txt .pydevproject .settings #vscode .vscode #local stuff files that end in ".local" or "tmp" or folders called "local" or "tmp" *.local *.tmp Loading
magma/hackfest_magma-agw-enb_vnfd/charms/enodeb/actions.yaml +7 −10 Original line number Diff line number Diff line Loading @@ -17,15 +17,8 @@ register: - mme-addr - gtp-bind-addr - s1c-bind-addr kill-pid: description: "Kill PID." params: pid: description: "PID." type: string default: "" required: - pid unregister: description: "Unregister from AGW." attach-ue: description: Attach User Emulator to enodeB params: Loading @@ -45,3 +38,7 @@ attach-ue: - usim-imsi - usim-k - usim-opc detach-ue: description: "Detach from AGW." remove-default-gw: description: "Remove default gateway" No newline at end of file
magma/hackfest_magma-agw-enb_vnfd/charms/enodeb/src/charm.py +54 −14 Original line number Diff line number Diff line Loading @@ -13,6 +13,7 @@ # See the License for the specific language governing permissions and # limitations under the License. import sys sys.path.append("lib") from ops.charm import CharmBase from ops.framework import StoredState Loading @@ -34,6 +35,7 @@ logger = logging.getLogger(__name__) class EnodebCharm(CharmBase): state = StoredState() def __init__(self, *args): super().__init__(*args) # An example of setting charm state Loading @@ -49,17 +51,22 @@ class EnodebCharm(CharmBase): self.on.upgrade_charm, self.on.register_action, self.on.attach_ue_action, self.on.kill_pid_action, self.on.unregister_action, self.on.detach_ue_action, self.on.remove_default_gw, ): self.framework.observe(event, self) def on_config_changed(self, event): """Handle changes in configuration""" unit = self.model.unit def on_install(self, event): """Called when the charm is being installed""" unit = self.model.unit # Install your software and its dependencies unit.status = ActiveStatus() def on_upgrade_charm(self, event): """Upgrade the charm.""" unit = self.model.unit Loading @@ -68,6 +75,7 @@ class EnodebCharm(CharmBase): self.on_install(event) # When maintenance is done, return to an Active state unit.status = ActiveStatus() def on_register_action(self, event): """Register to AGW (EPC).""" try: Loading @@ -89,7 +97,7 @@ class EnodebCharm(CharmBase): "--enb_files.drb_config=/configzmq/drb.conf", "/configzmq/enb.conf", "--rf.device_name=zmq", "--rf.device_args='fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6'" "--rf.device_args='fail_on_disconnect=true,tx_port=tcp://*:2000,rx_port=tcp://localhost:2001,id=enb,base_srate=23.04e6'", ] ) logger.debug("Register action: executing") Loading @@ -104,24 +112,24 @@ class EnodebCharm(CharmBase): event.fail("Timeout error") except Exception as e: event.fail(e) def on_kill_pid_action(self, event): """Kill PID""" def on_unregister_action(self, event): """Unregister action""" try: pid = event.params["pid"] command = "kill -9 {}".format(pid) subprocess.check_output(command, shell=True) command = "sudo killall -s KILL srsenb" output = subprocess.check_output(command, shell=True) event.set_results( {"status": "ok", "pid": pid, "message": "PID {} killed".format(pid)} { "status": "ok", "message": "Unregistered successfully", "output": output, } ) except subprocess.CalledProcessError as e: event.fail("Command error: {}".format(e.output)) except Exception as e: event.fail(e) def _run_daemon(self, cmd, stdout_file): with open(stdout_file, "wb") as f: return subprocess.Popen(cmd, shell=True, stdout=f) def on_attach_ue_action(self, event): """Attach User Emulator to EnodeB.""" try: Loading @@ -140,7 +148,7 @@ class EnodebCharm(CharmBase): "--nas.apn=oai.ipv4", "--rf.device_name=zmq", "--rf.device_args='tx_port=tcp://*:2001,rx_port=tcp://localhost:2000,id=ue,base_srate=23.04e6'", "/configzmq/ue.conf" "/configzmq/ue.conf", ] ) logger.debug("Attach UE action: executing") Loading @@ -151,5 +159,37 @@ class EnodebCharm(CharmBase): ) except subprocess.CalledProcessError as ex: event.fail(ex) def on_detach_ue_action(self, event): """Detach UE action""" try: command = "sudo killall -s KILL srsue" output = subprocess.check_output(command, shell=True) event.set_results( {"status": "ok", "message": "Detached successfully", "output": output} ) except subprocess.CalledProcessError as e: event.fail("Command error: {}".format(e.output)) except Exception as e: event.fail(e) def remove_default_gw(self, event): """Remove default gw""" try: command = "sudo route del default" output = subprocess.check_output(command, shell=True) event.set_results( {"status": "ok", "message": "Default route removed!", "output": output} ) except subprocess.CalledProcessError as e: event.fail("Command error: {}".format(e.output)) except Exception as e: event.fail(e) def _run_daemon(self, cmd, stdout_file): with open(stdout_file, "wb") as f: return subprocess.Popen(cmd, shell=True, stdout=f) if __name__ == "__main__": main(EnodebCharm)
magma/hackfest_magma-agw-enb_vnfd/magma-agw-enb_vnfd.yaml +5 −0 Original line number Diff line number Diff line Loading @@ -91,6 +91,9 @@ vnfd:vnfd-catalog: ssh-access: required: True default-user: ubuntu initial-config-primitive: - seq: '1' name: remove-default-gw config-primitive: - name: register parameter: Loading @@ -108,6 +111,8 @@ vnfd:vnfd-catalog: data-type: STRING - name: usim-opc data-type: STRING - name: unregister - name: detach-ue internal-vld: - id: internalS1 name: internalS1 Loading