Exemple #1
0
    def __init__(self, lwip):
        """
        Initialize new object.

        Parameters
        ----------
        lwip : lib instance (loaded via ctypes)
            lwip library instance
        """
        self._pbuf_alloc = ctypes_helper.wrap_function(
            lwip,
            'pbuf_alloc',
            ctypes.POINTER(PBuf),
            [ctypes.c_int64, ctypes.c_uint16, ctypes.c_int64],
        )

        self._pbuf_take = ctypes_helper.wrap_function(
            lwip,
            'pbuf_take',
            ctypes.c_int8,
            [ctypes.POINTER(PBuf), ctypes.c_void_p, ctypes.c_uint16],
        )

        self._pbuf_free = ctypes_helper.wrap_function(
            lwip,
            'pbuf_free',
            ctypes.c_uint8,
            [ctypes.POINTER(PBuf)],
        )
Exemple #2
0
    def __init__(self, lwip, allocator):
        """
        Initialize new UdpSocket object.

        Parameters
        ----------
        lwip : lib instance
            the instance of the lwip library, loaded via ctypes
        allocator : Allocator
            stack memory allocator
        """
        self._lwip = lwip
        self._allocator = allocator
        self._pcb = None
        self._rx_callback = None

        self._udp_new_ip_type = ctypes_helper.wrap_function(
            self._lwip,
            'udp_new_ip_type',
            ctypes.POINTER(_UdpPcb),
            [ctypes.c_uint8],
        )
        self._udp_bind = ctypes_helper.wrap_function(
            self._lwip,
            'udp_bind',
            err_t,
            [
                ctypes.POINTER(_UdpPcb),
                ctypes.POINTER(IpV4Addr),
                ctypes.c_uint16,
            ],
        )
        self._udp_recv = ctypes_helper.wrap_function(
            self._lwip,
            'udp_recv',
            None,
            [ctypes.POINTER(_UdpPcb), udp_recv_fn_func_type, ctypes.c_void_p],
        )
        self._udp_send_to = ctypes_helper.wrap_function(
            self._lwip,
            'udp_sendto',
            err_t,
            [
                ctypes.POINTER(_UdpPcb),
                ctypes.POINTER(PBuf),
                ctypes.POINTER(IpV4Addr),
                ctypes.c_uint16,
            ],
        )
Exemple #3
0
 def set_default(self):
     netif_set_default = ctypes_helper.wrap_function(
         self._lwip,
         'netif_set_default',
         None,
         [ctypes.POINTER(self._LwipNetIf)],
     )
     netif_set_default(ctypes.byref(self._interface))
Exemple #4
0
 def set_link_down(self):
     netif_set_link_down = ctypes_helper.wrap_function(
         self._lwip,
         'netif_set_link_down',
         None,
         [ctypes.POINTER(self._LwipNetIf)],
     )
     netif_set_link_down(ctypes.byref(self._interface))
Exemple #5
0
    def __init__(self, lwip):
        """
        Initialize new object.

        Parameters
        ----------
        lwip : ctypes wrapper for lib
            lwip library instance
        """
        self._lwip = lwip

        self._ping_init = ctypes_helper.wrap_function(
            self._lwip,
            'ping_init',
            None,
            [ctypes.POINTER(IpAddr)],
        )

        self._ping_send_now = ctypes_helper.wrap_function(
            self._lwip,
            'ping_send_now',
            None,
            None,
        )

        self._ping_callback_fn = ctypes.CFUNCTYPE(
            None,
            ctypes.c_uint8,
        )

        self._set_ping_callback = ctypes_helper.wrap_function(
            self._lwip,
            'set_ping_callback',
            None,
            [self._ping_callback_fn],
        )
Exemple #6
0
    def init(self):
        """
        Initialize stack.

        The new instance of the stack library will be loaded.
        """
        self._lwip = self._library_loader()

        self._sys_check_timeouts = ctypes_helper.wrap_function(
            self._lwip,
            'sys_check_timeouts',
            None,
            None,
        )

        self._lwip.lwip_init()
Exemple #7
0
    def __init__(self, name, lwip, stack):
        """
        Initialize new object.

        Parameters
        ----------
        name : string
            human readable interface name
        lwip : ctype lib
            instance of the lwip lib
        stack : Stack
            stack that will service the interface
        """
        self._name = name
        self._lwip = lwip
        self._stack = stack

        self._netif_add = ctypes_helper.wrap_function(
            self._lwip,
            'netif_add',
            ctypes.POINTER(self._LwipNetIf),
            [
                ctypes.POINTER(self._LwipNetIf),
                ctypes.POINTER(IpV4Addr),
                ctypes.POINTER(IpV4Addr),
                ctypes.POINTER(IpV4Addr),
                ctypes.c_void_p,
                self.netif_init_fn_type,
                self.netif_input_fn_type,
            ],
        )

        self._etharp_output = ctypes_helper.wrap_function(
            self._lwip,
            'etharp_output',
            ctypes.c_int8,
            [
                ctypes.POINTER(self._LwipNetIf),
                ctypes.POINTER(PBuf),
                ctypes.POINTER(IpV4Addr),
            ],
        )

        self._ip_input = ctypes_helper.wrap_function(
            self._lwip,
            'ethernet_input',
            ctypes.c_int8,
            [
                ctypes.POINTER(PBuf),
                ctypes.POINTER(self._LwipNetIf),
            ],
        )

        self._interface = self._LwipNetIf()

        self._netif_input = self.netif_input_fn_type()
        self._netif_output = self.netif_output_fn()

        self._netif_link_output = self.netif_linkoutput_fn(
            self._link_output_wrapper, )
        self._netif_user_link_output = None

        self._netif_status = self.netif_status_cbk_fn()
        self._netif_link_status = self.netif_status_cbk_fn()

        self._ping_callback = None