User Tools

Site Tools


ephyl_framework_v2

Differences

This shows you the differences between two versions of the page.

Link to this comparison view

ephyl_framework_v2 [2022/09/28 17:36] – created aparisephyl_framework_v2 [2022/11/30 17:09] (current) aparis
Line 1: Line 1:
 # S3_CAP, a modular framework for slotted transmission # S3_CAP, a modular framework for slotted transmission
  
-This tutorial [will] shows how to use the S3_CAP framework inside the FIT/CorteXlab testbed, implement your access policies and change the used PHY layer. +This tutorial shows how to use the [S3_CAP framework](https://github.com/AmauryPARIS/gr-ephyl) inside the FIT/CorteXlab testbed and implement a access policy. The framework allows you to change the used PHY layeras described [here](https://github.com/AmauryPARIS/gr-ephyl#phy-layer), but the tutorial will only show you how to implement the access policy. 
 + 
 +First you need to retrieve this [docker image](https://hub.docker.com/repository/docker/amauryparis/s3cap): 
 + 
 +<code> 
 +you@yourpc:~$ docker pull amauryparis/s3cap:latest 
 +you@yourpc:~$ docker run -dti --net=host --expose 2222 --privileged amauryparis/s3cap:latest 
 +</code> 
 + 
 +Access the docker container using ssh :  
 + 
 +<code> 
 +you@yourpc:~$ ssh -Xp 2222 root@localhost 
 +</code>  
 + 
 +In this environment, you have access to the S3CAP project with a LoRa PHY layer. By default, a dummy and random access policy is implemented in files `upper/sn_upper.py` and `upper/bs_upper.py`. You can change the two files as follow, to update the access policies of our system and make every node transmitting on a predefined slot. We will also update the content of control messages.  
 + 
 + 
 +New `upper/sn_upper.py` :  
 +<code> 
 +while True: 
 +    feedback_pmt = up.recv() 
 +    feedback = up.extract(feedback_pmt) 
 + 
 +    up.log(feedback["NODE"], "SN - Feedback received - source sensor : %s | frame : %s | dlcch : %s" % (feedback["NODE"], feedback["FRAME"], feedback["DLCCH"])) 
 +    print("SN - Feedback received - source sensor : %s | frame : %s | dlcch : %s" % (feedback["NODE"], feedback["FRAME"], feedback["DLCCH"])) 
 + 
 +    action = "True" 
 +    frame = feedback["FRAME"] + 1 
 +     
 +    if feedback["NODE"] == "A": 
 +        sequence = [[0, "Y"], [1, False], [1, False], [1, False]] 
 +        ulcch = str("poulet_basquaise"
 +    else: 
 +        sequence = [[0, False], [1, "X"], [1, False], [1, False]] 
 +        ulcch = str("boeuf_bourguignon"
 + 
 +    inst = up.create_SN_inst(feedback["NODE"], frame, action, sequence, ulcch) 
 +    up.send(inst) 
 +     
 +    up.log(frame, "Instruction send - %s" % (inst)) 
 +    print("SN - Instruction send - %s" % (inst)) 
 +</code>  
 + 
 + 
 +New `upper/bs_upper.py`: 
 +<code> 
 +while True: 
 +    feedback_pmt = up.recv() 
 +    feedback = up.extract(feedback_pmt) 
 + 
 +    up.log(feedback["FRAME"], "Feedback received - frame : %s | ulcch : %s | rx : %s" % (feedback["FRAME"], feedback["ULCCH"], feedback["RX"])) 
 +    print("Feedback received - frame : %s | ulcch : %s | rx : %s" % (feedback["FRAME"], feedback["ULCCH"], feedback["RX"])) 
 + 
 +    list_dlcch = [] 
 +    frame = feedback["FRAME"] + 1 
 + 
 +    for sensor in up.list_sensors: 
 +        dlcch = str("tarte_aux_pommes"
 +        list_dlcch.append([sensor, dlcch]) 
 +     
 +    inst = up.create_BS_inst(list_dlcch, frame) 
 +    up.send(inst) 
 + 
 +    up.log(frame, "Instruction send - %s" % (inst)) 
 +    print("Instruction send - %s" % (inst)) 
 +</code>  
 + 
 +You can also set the number of slot on the uplink channel, with the `slot_count` parameter in the sensor and base station upper files, and with the `--S` option inside the GNU Radio flowgraph.  
 + 
 +You can now exit the docker container, to commit and push the updated version on your account.  
 +<code> 
 +you@yourpc:~$ docker ps -a  
 +you@yourpc:~$ docker commit [CONTAINER ID] [NEW IMAGE NAME]  
 +you@yourpc:~$ docker tag [NEW IMAGE NAME] [DOCKER USERNAME]/[NEW IMAGE NAME]  
 +you@yourpc:~$ docker login  
 +you@yourpc:~$ docker push [DOCKER USERNAME]/[NEW IMAGE NAME]  
 +</code>  
 + 
 +After booking the testbed with OAR, you can upload the image on three nodes of your choice with an SSH access, as follow :  
 +<code> 
 +  nodeX: 
 +    container: 
 +    - image: [DOCKER USERNAME]/[NEW IMAGE NAME]:latest 
 +      command: /usr/sbin/sshd -p 2222 -D 
 +</code>  
 + 
 +Once connected to each of the three nodes, you can run the following commands. It will start the access policy and then the PHY layer of each node. 
 + 
 +On `NODE_X` - the first sensor 
 + 
 +<code> 
 +python2 /root/cxlb_toolchain_build/gr-ephyl/upper/sn_upper.py --slot_count=4 & 
 +python2 /root/cxlb_toolchain_build/gr-ephyl/examples/LoRa/sn_multislot_dyn_ephyl_lora.py --sn-id=A --ip-bs-addr=NODE_Z --S=4 
 +</code>  
 + 
 +On `NODE_Y` - the second sensor 
 + 
 +<code> 
 +python2 /root/cxlb_toolchain_build/gr-ephyl/upper/sn_upper.py --slot_count=4 & 
 +python2 /root/cxlb_toolchain_build/gr-ephyl/examples/LoRa/sn_multislot_dyn_ephyl_lora.py --sn-id=B --ip-bs-addr=NODE_Z --S=4 
 +</code>  
 + 
 +On `NODE_Z` - the base station 
 + 
 +<code> 
 +python2 /root/cxlb_toolchain_build/gr-ephyl/upper/bs_upper.py --slot_count=4 & 
 +python2 /root/cxlb_toolchain_build/gr-ephyl/examples/LoRa/bs_multisn_multislot_dyn_ephyl_lora.py --sn-1-ip-addr=NODE_X --sn-2-ip-addr=NODE_Y --S=4 
 +</code>  
 + 
 +You will then observe the newly updated access policy.
ephyl_framework_v2.txt · Last modified: 2022/11/30 17:09 by aparis

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki