Send raw ipmi command

    This allows arbitrary IPMI bytes to be issued.  This is commonly used
    for certain vendor specific commands.

    :param netfn: Net function number
    :param command: Command value
    :param bridge_request: The target slave address and channel number for
                        the bridge request.
    :param data: Command data as a tuple or list
    :param kwargs:
        - api_host=127.0.0.1
        - api_user=admin
        - api_pass=example
        - api_port=623
        - api_kg=None

    :returns: dict -- The response from IPMI device

    CLI Examples:

    .. code-block:: bash

        salt-call ipmi.raw_command netfn=0x06 command=0x46 data=[0x02]
        # this will return the name of the user with id 2 in bytes

def raw_command(netfn, command, bridge_request=None, data=(), retry=True, delay_xmit=None, **kwargs):
    '''
    Send raw ipmi command

    This allows arbitrary IPMI bytes to be issued.  This is commonly used
    for certain vendor specific commands.

    :param netfn: Net function number
    :param command: Command value
    :param bridge_request: The target slave address and channel number for
                        the bridge request.
    :param data: Command data as a tuple or list
    :param kwargs:
        - api_host=127.0.0.1
        - api_user=admin
        - api_pass=example
        - api_port=623
        - api_kg=None

    :returns: dict -- The response from IPMI device

    CLI Examples:

    .. code-block:: bash

        salt-call ipmi.raw_command netfn=0x06 command=0x46 data=[0x02]
        # this will return the name of the user with id 2 in bytes
    '''
    with _IpmiSession(**kwargs) as s:
        r = s.raw_command(netfn=int(netfn),
                        command=int(command),
                        bridge_request=bridge_request,
                        data=data,
                        retry=retry,
                        delay_xmit=delay_xmit)
        return r