<output id="qn6qe"></output>

    1. <output id="qn6qe"><tt id="qn6qe"></tt></output>
    2. <strike id="qn6qe"></strike>

      亚洲 日本 欧洲 欧美 视频,日韩中文字幕有码av,一本一道av中文字幕无码,国产线播放免费人成视频播放,人妻少妇偷人无码视频,日夜啪啪一区二区三区,国产尤物精品自在拍视频首页,久热这里只有精品12

      實驗7:基于REST API的SDN北向應用實踐

      一、基本要求:

      ①、編寫Python程序,調用OpenDaylight的北向接口實現以下功能:

      1、刪除s1上的流表數據代碼及其截圖:
      #!/usr/bin/python
      import requests
      from requests.auth import HTTPBasicAuth
      def http_delete(url):
      	url= url
      	headers = {'Content-Type':'application/json'}
      	resp = requests.detele(url,headers=headers,auth=HTTPBasicAuth('admin', 'admin'))
      	print (resp.content)
      	
      if __name__ == "__main__":
      	url = 'http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/'
      	http_delete(url)
      

      2、硬超時代碼及其截圖:
      #硬超時json代碼修改
      {
      "flow": [
      {
      "id": "1",
      "match": {
      "in-port": "1",
      "ethernet-match": {
      "ethernet-type": {
      "type": "0x0800"
      }
      },
      "ipv4-destination": "10.0.0.3/32"
      },
      "instructions": {
      "instruction": [
      {
      "order": "0",
      "apply-actions": {
      "action": [
      {
      "order": "0",
      "drop-action": {}
      }
      ]
      }
      }
      ]
      },
      "flow-name": "flow1",
      "priority": "65535",
      "hard-timeout": "20",
      "cookie": "2",
      "table_id": "0"
      }
      ]
      }
      
      #!/usr/bin/python
      import requests
      from requests.auth import HTTPBasicAuth
      def http_timeout(url,str):
      	url= url
      	headers = {'Content-Type':'application/json'}
      	resp = requests.put(url,str,headers=headers,auth=HTTPBasicAuth('admin', 'admin'))
      	print (resp.content)
      	
      if __name__ == "__main__":
      	url = 'http://127.0.0.1:8181/restconf/config/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/flow/1'
      	with open("./timeout.json") as file:
              	str = file.read()
      	http_timeout(url,str)
      

      3、獲取s1上活動的流表數代碼及其截圖:
      #!/usr/bin/python
      import requests
      from requests.auth import HTTPBasicAuth
      def http_get(url):
      	url= url
      	headers = {'Content-Type':'application/json'}
      	resp = requests.get(url,headers=headers,auth=HTTPBasicAuth('admin', 'admin'))
      	print (resp.content)
      	
      if __name__ == "__main__":
      	url = 'http://127.0.0.1:8181/restconf/operational/opendaylight-inventory:nodes/node/openflow:1/flow-node-inventory:table/0/opendaylight-flow-table-statistics:flow-table-statistics'
      	http_get(url)
      

      ②、編寫Python程序,調用Ryu的北向接口實現以下功能:

      1、實現上述OpenDaylight實驗拓撲上相同的硬超時流表下發。

      代碼:

      #!/usr/bin/python
      import requests
      def http_timeout(url,str):
      	url= url
      	headers = {'Content-Type':'application/json'}
      	resp = requests.post(url,str,headers=headers)
      	print (resp.content)
      	
      if __name__ == "__main__":
      	url = 'http://127.0.0.1:8080/stats/flowentry/add'
      	with open("./032002225_timeout.json") as file:
              	str = file.read()
      	http_timeout(url,str)
      
      {
          "dpid": 1,
          "cookie": 1,
          "cookie_mask": 1,
          "table_id": 0,
          "hard_timeout": 20,
          "priority": 65535,
          "flags": 1,
          "match":{
              "in_port":1
          },
          "actions":[
      
          ]
       }
      

      ryu-manager ryu.app.simple_switch_13 ryu.app.ofctl_rest

      參考Ryu REST API的文檔,基于VLAN實驗的網絡拓撲,編程實現相同的VLAN配置。

      建立拓撲:sudo mn --custom topo.py --topo mytopo --mac --controller=remote,ip=127.0.0.1,port=6633 --switch ovs,protocols=OpenFlow13

      from mininet.topo import Topo
      
      class MyTopo(Topo):
          def __init__(self):
              # initilaize topology
              Topo.__init__(self)
      
              self.addSwitch("s1")
              self.addSwitch("s2")
      
              self.addHost("h1")
              self.addHost("h2")
              self.addHost("h3")
              self.addHost("h4")
      
              self.addLink("s1", "h1")
              self.addLink("s1", "h2")
              self.addLink("s2", "h3")
              self.addLink("s2", "h4")
              self.addLink("s1", "s2")
      
      topos = {'mytopo': (lambda: MyTopo())}
      
      import json
      
      import requests
      
      if __name__ == "__main__":
          url = 'http://127.0.0.1:8080/stats/flowentry/add'
          headers = {'Content-Type': 'application/json'}
          flow1 = {
              "dpid": 1,
              "priority": 1,
              "match":{
                  "in_port": 1
              },
              "actions":[
                  {
                      "type": "PUSH_VLAN",    
                      "ethertype": 33024      
                  },
                  {
                      "type": "SET_FIELD",
                      "field": "vlan_vid",    
                      "value": 4096           
                  },
                  {
                      "type": "OUTPUT",
                      "port": 3
                  }
              ]
          }
          flow2 = {
              "dpid": 1,
              "priority": 1,
              "match":{
                  "in_port": 2
              },
              "actions":[
                  {
                      "type": "PUSH_VLAN",     
                      "ethertype": 33024      
                  },
                  {
                      "type": "SET_FIELD",
                      "field": "vlan_vid",     
                      "value": 4097           
                  },
                  {
                      "type": "OUTPUT",
                      "port": 3
                  }
              ]
          }
          flow3 = {
              "dpid": 1,
              "priority": 1,
              "match":{
                  "vlan_vid": 0
              },
              "actions":[
                  {
                      "type": "POP_VLAN",    
                      "ethertype": 33024     
                  },
                  {
                      "type": "OUTPUT",
                      "port": 1
                  }
              ]
          }
          flow4 = {
              "dpid": 1,
              "priority": 1,
              "match": {
                  "vlan_vid": 1
              },
              "actions": [
                  {
                      "type": "POP_VLAN", 
                      "ethertype": 33024  
                  },
                  {
                      "type": "OUTPUT",
                      "port": 2
                  }
              ]
          }
          flow5 = {
              "dpid": 2,
              "priority": 1,
              "match": {
                  "in_port": 1
              },
              "actions": [
                  {
                      "type": "PUSH_VLAN", 
                      "ethertype": 33024 
                  },
                  {
                      "type": "SET_FIELD",
                      "field": "vlan_vid", 
                      "value": 4096  
                  },
                  {
                      "type": "OUTPUT",
                      "port": 3
                  }
              ]
          }
          flow6 = {
              "dpid": 2,
              "priority": 1,
              "match": {
                  "in_port": 2
              },
              "actions": [
                  {
                      "type": "PUSH_VLAN",  
                      "ethertype": 33024  
                  },
                  {
                      "type": "SET_FIELD",
                      "field": "vlan_vid",  
                      "value": 4097 
                  },
                  {
                      "type": "OUTPUT",
                      "port": 3
                  }
              ]
          }
          flow7 = {
              "dpid": 2,
              "priority": 1,
              "match": {
                  "vlan_vid": 0
              },
              "actions": [
                  {
                      "type": "POP_VLAN", 
                      "ethertype": 33024  
                  },
                  {
                      "type": "OUTPUT",
                      "port": 1
                  }
              ]
          }
          flow8 = {
              "dpid": 2,
              "priority": 1,
              "match": {
                  "vlan_vid": 1
              },
              "actions": [
                  {
                      "type": "POP_VLAN", 
                      "ethertype": 33024  
                  },
                  {
                      "type": "OUTPUT",
                      "port": 2
                  }
              ]
          }
          res1 = requests.post(url, json.dumps(flow1), headers=headers)
          res2 = requests.post(url, json.dumps(flow2), headers=headers)
          res3 = requests.post(url, json.dumps(flow3), headers=headers)
          res4 = requests.post(url, json.dumps(flow4), headers=headers)
          res5 = requests.post(url, json.dumps(flow5), headers=headers)
          res6 = requests.post(url, json.dumps(flow6), headers=headers)
          res7 = requests.post(url, json.dumps(flow7), headers=headers)
          res8 = requests.post(url, json.dumps(flow8), headers=headers)
      

      進階要求

      shownode.py

      import requests
      import time
      import re
      
      
      class GetNodes:
          def __init__(self, ip):
              self.ip = ip
              
          def get_switch_id(self):
              url = 'http://' + self.ip + '/stats/switches'
              re_switch_id = requests.get(url=url).json()
              switch_id_hex = []
              for i in re_switch_id:
                  switch_id_hex.append(hex(i))
      
              return switch_id_hex
      
          def getflow(self):
              url = 'http://' + self.ip + '/stats/flow/%d'
              switch_list = self.get_switch_id()
              ret_flow = []
              for switch in switch_list:
                  new_url = format(url % int(switch, 16))
                  re_switch_flow = requests.get(url=new_url).json()
                  ret_flow.append(re_switch_flow)
              return ret_flow
      
          def show(self):
              flow_list = self.getflow()
              for flow in flow_list:
                  for dpid in flow.keys():
                      dp_id = dpid
                      switchnum= '{1}'.format(hex(int(dp_id)), int(dp_id))        
                      print('s'+switchnum,end = " ")
                      switchnum = int(switchnum)
                  for list_table in flow.values():
                      for table in list_table:          
                          string1 = str(table)
                          if re.search("'dl_vlan': '(.*?)'", string1) is not None:
                             num = re.search("'dl_vlan': '(.*?)'", string1).group(1);
                             if num == '0' and switchnum == 1:
                                print('h1',end = " ")
                             if num == '1' and switchnum == 1:
                                print('h2',end = " ")
                             if num == '0' and switchnum == 2:
                                print('h3',end = " ")
                             if num == '1' and switchnum == 2:
                                print('h4',end = " ")
              print("")
              flow_list = self.getflow()
              for flow in flow_list:
                  for dpid in flow.keys():
                      dp_id = dpid
                      print('switch_name:s{1}'.format(hex(int(dp_id)), int(dp_id)))
                  for list_table in flow.values():
                      for table in list_table:
                          print(table)
      s1 = GetNodes("127.0.0.1:8080")
      s1.show()
      


      dpctl dump-flows

      個人總結

      這個實驗算是綜合能力比較強的實驗,在基本要求第一點就結合了實驗4的內容,第二點結合了之前許多的小實驗,特別是第二點,剛開始我忘記了得用ryu-manager ryu.app.simple_switch_13 ryu.app.ofctl_rest去連接ryu,導致一直pingall不了,最后是在舍友的提醒下發現了這個問題。而且通過同學還知道可以用curl來刪除流表。
      對我來說,這次實驗有較大的難度,綜合性很強,讓我對ODL和ryu有了更深的了解。

      posted @ 2022-10-26 11:39  小蘇同學  閱讀(48)  評論(0)    收藏  舉報
      主站蜘蛛池模板: 久久精品国产99久久久古代| 最近免费中文字幕mv在线视频3| 91热在线精品国产一区| 鲁丝一区鲁丝二区鲁丝三区| 国产一区二区三区乱码在线观看 | 久久久精品2019中文字幕之3| 中文字幕亚洲综合久久2020| 人妻少妇精品视频专区| 色噜噜亚洲精品中文字幕| 综合激情网一区二区三区| 永城市| 国产精品中文字幕在线看| 精品亚洲国产成人av| 18禁无遮挡啪啪无码网站破解版| 人成午夜免费视频无码| 国产女人被狂躁到高潮小说| 久久精品国产一区二区三| 国产无套精品一区二区| 日韩av一区二区三区不卡| 亚洲综合日韩av在线| 精品人妻二区中文字幕| 黄男女激情一区二区三区| 精品久久久无码中文字幕| 亚洲午夜香蕉久久精品| 777天堂麻豆爱综合视频| 日韩亚洲视频一区二区三区| 亚洲大尺度无码专区尤物| 亚洲 制服 丝袜 无码| 你拍自拍亚洲一区二区三区| 国产成人a∨激情视频厨房| 婷婷色综合成人成人网小说 | 通许县| 少妇xxxxx性开放| аⅴ天堂中文在线网| 久久不见久久见免费视频观看| 亚洲精品日韩在线观看| av综合网男人的天堂| 九九热免费公开视频在线| 怡春院久久国语视频免费| 永久免费AV无码国产网站| 国产一区二区三区的视频|