コード例 #1
0
    def tunnel_create(self, tunnel_id, peer_tunnel_id, socket):
        """
        Creates a new L2TP tunnel.

        :param tunnel_id: Local tunnel identifier
        :param peer_tunnel_id: Remote peer tunnel identifier
        :param socket: UDP socket file descriptor
        """

        msg = self._create_message(L2TP_CMD_TUNNEL_CREATE, [
            netlink.U32Attr(L2TP_ATTR_CONN_ID, tunnel_id),
            netlink.U32Attr(L2TP_ATTR_PEER_CONN_ID, peer_tunnel_id),
            netlink.U8Attr(L2TP_ATTR_PROTO_VERSION, 3),
            netlink.U16Attr(L2TP_ATTR_ENCAP_TYPE, L2TP_ENCAPTYPE_UDP),
            netlink.U32Attr(L2TP_ATTR_FD, socket),
        ])
        msg.send(self.connection)

        try:
            self.connection.recv()
        except OSError, e:
            if e.errno == errno.EEXIST:
                # This tunnel identifier is already in use; make sure to remove it from
                # our pool of assignable tunnel identifiers.
                raise L2TPTunnelExists(tunnel_id)

            raise NetlinkError
コード例 #2
0
    def session_create(self, tunnel_id, session_id, peer_session_id, name):
        """
        Creates a new ethernet session over the tunnel.

        :param tunnel_id: Local tunnel identifier
        :param session_id: Local session identifier
        :param peer_session_id: Remote peer session identifier
        :param name: Interface name
        """

        msg = self._create_message(
            L2TP_CMD_SESSION_CREATE,
            [
                netlink.U32Attr(L2TP_ATTR_CONN_ID, tunnel_id),
                netlink.U32Attr(L2TP_ATTR_SESSION_ID, session_id),
                netlink.U32Attr(L2TP_ATTR_PEER_SESSION_ID, peer_session_id),
                netlink.U16Attr(L2TP_ATTR_PW_TYPE, L2TP_PWTYPE_ETH),
                # TODO: Cookies.
                netlink.NulStrAttr(L2TP_ATTR_IFNAME, name),
            ])
        msg.send(self.connection)

        try:
            self.connection.recv()
        except OSError, e:
            if e.errno == errno.EEXIST:
                raise L2TPSessionExists(session_id)

            raise NetlinkError
コード例 #3
0
 def destroy_radio(self, radio_id):
     attrs = [netlink.U32Attr(HWSIM_ATTR_RADIO_ID, radio_id)]
     msg = netlink.GenlMessage(self._fid, HWSIM_CMD_DESTROY_RADIO,
                               flags = netlink.NLM_F_REQUEST |
                                       netlink.NLM_F_ACK,
                               attrs = attrs)
     msg.send_and_recv(self._conn)
コード例 #4
0
  def session_delete(self, tunnel_id, session_id):
    """
    Deletes an existing session.

    :param tunnel_id: Local tunnel identifier
    :param session_id: Local session identifier
    """
    msg = self._create_message(L2TP_CMD_SESSION_DELETE, [
      netlink.U32Attr(L2TP_ATTR_CONN_ID, tunnel_id),
      netlink.U32Attr(L2TP_ATTR_SESSION_ID, session_id),
    ])
    msg.send(self.connection)

    try:
      reply = self.connection.recv()
    except OSError:
      logger.debug(traceback.format_exc())
      logger.warning("Unable to remove tunnel %d session %d!" % (tunnel_id, session_id))
コード例 #5
0
ファイル: hwsim.py プロジェクト: sjp01/hostapd
 def create_radio(self, n_channels=None):
     attrs = []
     if n_channels:
         attrs.append(netlink.U32Attr(HWSIM_ATTR_CHANNELS, n_channels))
     msg = netlink.GenlMessage(self._fid, HWSIM_CMD_CREATE_RADIO,
                               flags = netlink.NLM_F_REQUEST |
                                       netlink.NLM_F_ACK,
                               attrs = attrs)
     return msg.send_and_recv(self._conn).ret
コード例 #6
0
 def destroy_radio(self, radio_id):
     try:
         int(radio_id)
         attrs = [netlink.U32Attr(HWSIM_ATTR_RADIO_ID, int(radio_id))]
     except ValueError:
         attrs = [netlink.NulStrAttr(HWSIM_ATTR_RADIO_NAME, radio_id)]
     msg = netlink.GenlMessage(self._fid, HWSIM_CMD_DESTROY_RADIO,
                               flags = netlink.NLM_F_REQUEST |
                                       netlink.NLM_F_ACK,
                               attrs = attrs)
     msg.send_and_recv(self._conn)
コード例 #7
0
    def session_modify(self, tunnel_id, session_id, mtu):
        """
        Modifies an existing session.

        :param tunnel_id: Local tunnel identifier
        :param session_id: Local session identifier
        """

        msg = self._create_message(L2TP_CMD_SESSION_MODIFY, [
            netlink.U32Attr(L2TP_ATTR_CONN_ID, tunnel_id),
            netlink.U32Attr(L2TP_ATTR_SESSION_ID, session_id),
            netlink.U16Attr(L2TP_ATTR_MTU, mtu),
        ])
        msg.send(self.connection)

        try:
            self.connection.recv()
        except OSError:
            logger.debug(traceback.format_exc())
            logger.warning("Unable to modify tunnel %d session %d!" %
                           (tunnel_id, session_id))
コード例 #8
0
    def create_radio(self, n_channels=None, use_chanctx=False,
                     use_p2p_device=False):
        attrs = []
        if n_channels:
            attrs.append(netlink.U32Attr(HWSIM_ATTR_CHANNELS, n_channels))
        if use_chanctx:
            attrs.append(netlink.FlagAttr(HWSIM_ATTR_USE_CHANCTX))
        if use_p2p_device:
            attrs.append(netlink.FlagAttr(HWSIM_ATTR_SUPPORT_P2P_DEVICE))

        msg = netlink.GenlMessage(self._fid, HWSIM_CMD_CREATE_RADIO,
                                  flags = netlink.NLM_F_REQUEST |
                                          netlink.NLM_F_ACK,
                                  attrs = attrs)
        return msg.send_and_recv(self._conn).ret
コード例 #9
0
    def create_radio(self, n_channels=None, use_chanctx=False, hwname=None, no_vdev=False):
        attrs = []
        if n_channels:
            attrs.append(netlink.U32Attr(HWSIM_ATTR_CHANNELS, n_channels))
        if use_chanctx:
            attrs.append(netlink.FlagAttr(HWSIM_ATTR_USE_CHANCTX))
        if hwname:
            attrs.append(netlink.NulStrAttr(HWSIM_ATTR_RADIO_NAME, hwname))
        if no_vdev:
            attrs.append(netlink.FlagAttr(HWSIM_ATTR_NO_VDEV))

        msg = netlink.GenlMessage(self._fid, HWSIM_CMD_CREATE_RADIO,
                                  flags = netlink.NLM_F_REQUEST |
                                          netlink.NLM_F_ACK,
                                  attrs = attrs)
        return msg.send_and_recv(self._conn).ret
コード例 #10
0
    def tunnel_delete(self, tunnel_id):
        """
        Deletes an existing tunnel.

        :param tunnel_id: Local tunnel identifier
        """

        msg = self._create_message(L2TP_CMD_TUNNEL_DELETE, [
            netlink.U32Attr(L2TP_ATTR_CONN_ID, tunnel_id),
        ])
        msg.send(self.connection)

        try:
            self.connection.recv()
        except OSError:
            logger.debug(traceback.format_exc())
            logger.warning("Unable to remove tunnel %d!" % tunnel_id)