Move tunnel interface dependency from a codec to spinel-cli. Issue: #960 (#1041)

This commit is contained in:
PFierek
2016-12-05 06:24:38 -08:00
committed by Jonathan Hui
parent b11b644418
commit 5e72785d42
3 changed files with 26 additions and 28 deletions
+20 -13
View File
@@ -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")
+1 -14
View File
@@ -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)
+5 -1
View File
@@ -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")