mirror of
https://github.com/espressif/openthread.git
synced 2026-08-09 20:27:47 +00:00
This commit is contained in:
@@ -72,6 +72,7 @@ from spinel.const import kThread
|
||||
from spinel.codec import WpanApi
|
||||
from spinel.codec import SpinelCodec
|
||||
from spinel.stream import StreamOpen
|
||||
from spinel.tun import TunInterface
|
||||
import spinel.config as CONFIG
|
||||
import spinel.util as util
|
||||
|
||||
@@ -98,6 +99,7 @@ class SpinelCliCmd(Cmd, SpinelCodec):
|
||||
def __init__(self, stream_desc, nodeid, *_a, **kw):
|
||||
|
||||
self.nodeid = kw.get('nodeid', '1')
|
||||
self.tun_if = None
|
||||
|
||||
self.wpan_api = WpanApi(stream_desc, nodeid)
|
||||
self.wpan_api.queue_register(SPINEL.HEADER_DEFAULT)
|
||||
@@ -879,8 +881,8 @@ class SpinelCliCmd(Cmd, SpinelCodec):
|
||||
self.prop_insert_value(SPINEL.PROP_IPV6_ADDRESS_TABLE,
|
||||
arr, str(len(arr)) + 's')
|
||||
|
||||
if self.wpan_api.tun_if:
|
||||
self.wpan_api.tun_if.addr_add(ipaddr)
|
||||
if self.tun_if:
|
||||
self.tun_if.addr_add(ipaddr)
|
||||
|
||||
elif params[0] == "remove":
|
||||
arr += self.wpan_api.encode_fields('CLLC',
|
||||
@@ -891,8 +893,8 @@ class SpinelCliCmd(Cmd, SpinelCodec):
|
||||
|
||||
self.prop_remove_value(SPINEL.PROP_IPV6_ADDRESS_TABLE,
|
||||
arr, str(len(arr)) + 's')
|
||||
if self.wpan_api.tun_if:
|
||||
self.wpan_api.tun_if.addr_del(ipaddr)
|
||||
if self.tun_if:
|
||||
self.tun_if.addr_del(ipaddr)
|
||||
|
||||
print("Done")
|
||||
|
||||
@@ -1741,18 +1743,23 @@ class SpinelCliCmd(Cmd, SpinelCodec):
|
||||
pass
|
||||
|
||||
elif params[0] == "add":
|
||||
if self.wpan_api.tun_if:
|
||||
self.wpan_api.tun_if.addr_add(ipaddr)
|
||||
if self.tun_if:
|
||||
self.tun_if.addr_add(ipaddr)
|
||||
|
||||
elif params[0] == "remove":
|
||||
if self.wpan_api.tun_if:
|
||||
self.wpan_api.tun_if.addr_del(ipaddr)
|
||||
if self.tun_if:
|
||||
self.tun_if.addr_del(ipaddr)
|
||||
|
||||
elif params[0] == "up":
|
||||
self.wpan_api.if_up(self.nodeid)
|
||||
elif params[0] == "up":
|
||||
if os.geteuid() == 0:
|
||||
self.tun_if = TunInterface(nodeid)
|
||||
else:
|
||||
print("Warning: superuser required to start tun interface.")
|
||||
|
||||
elif params[0] == "down":
|
||||
self.wpan_api.if_down()
|
||||
if self.tun_if:
|
||||
self.tun_if.close()
|
||||
self.tun_if = None
|
||||
|
||||
elif params[0] == "ping":
|
||||
# Use tunnel to send ping
|
||||
@@ -1766,8 +1773,8 @@ class SpinelCliCmd(Cmd, SpinelCodec):
|
||||
if len(params) > 3:
|
||||
_interval = params[3]
|
||||
|
||||
if self.wpan_api.tun_if:
|
||||
self.wpan_api.tun_if.ping6(
|
||||
if self.tun_if:
|
||||
self.tun_if.ping6(
|
||||
" -c " + count + " -s " + size + " " + ipaddr)
|
||||
|
||||
print("Done")
|
||||
|
||||
@@ -57,7 +57,7 @@ from spinel.const import kThread
|
||||
from spinel.const import SPINEL
|
||||
from spinel.const import SPINEL_LAST_STATUS_MAP
|
||||
from spinel.hdlc import Hdlc
|
||||
from spinel.tun import TunInterface
|
||||
|
||||
|
||||
|
||||
FEATURE_USE_HDLC = 1
|
||||
@@ -724,8 +724,6 @@ class WpanApi(SpinelCodec):
|
||||
""" Helper class to format wpan command packets """
|
||||
|
||||
def __init__(self, stream, nodeid, use_hdlc=FEATURE_USE_HDLC):
|
||||
|
||||
self.tun_if = None
|
||||
self.stream = stream
|
||||
self.nodeid = nodeid
|
||||
|
||||
@@ -859,17 +857,6 @@ class WpanApi(SpinelCodec):
|
||||
|
||||
return item
|
||||
|
||||
def if_up(self, nodeid='1'):
|
||||
if os.geteuid() == 0:
|
||||
self.tun_if = TunInterface(nodeid)
|
||||
else:
|
||||
print("Warning: superuser required to start tun interface.")
|
||||
|
||||
def if_down(self):
|
||||
if self.tun_if:
|
||||
self.tun_if.close()
|
||||
self.tun_if = None
|
||||
|
||||
def ip_send(self, pkt):
|
||||
pay = self.encode_i(SPINEL.PROP_STREAM_NET)
|
||||
|
||||
|
||||
@@ -31,13 +31,15 @@ from __future__ import print_function
|
||||
|
||||
import os
|
||||
import sys
|
||||
import fcntl
|
||||
import struct
|
||||
import logging
|
||||
import threading
|
||||
import traceback
|
||||
import subprocess
|
||||
|
||||
if sys.platform == "linux" or sys.platform == "linux2":
|
||||
import fcntl
|
||||
|
||||
from select import select
|
||||
|
||||
import spinel.util as util
|
||||
@@ -63,6 +65,8 @@ class TunInterface(object):
|
||||
self.__init_linux()
|
||||
elif platform == "darwin":
|
||||
self.__init_osx()
|
||||
else:
|
||||
raise RuntimeError("Platform \"{}\" is not supported.".format(platform))
|
||||
|
||||
self.ifconfig("up")
|
||||
#self.ifconfig("inet6 add fd00::1/64")
|
||||
|
||||
Reference in New Issue
Block a user