cachepc-qemu

Fork of AMDESE/qemu with changes for cachepc side-channel attack
git clone https://git.sinitax.com/sinitax/cachepc-qemu
Log | Files | Refs | Submodules | LICENSE | sfeed.txt

barrier.rst (9451B)


      1Barrier client protocol
      2=======================
      3
      4QEMU's ``input-barrier`` device implements the client end of
      5the KVM (Keyboard-Video-Mouse) software
      6`Barrier <https://github.com/debauchee/barrier>`__.
      7
      8This document briefly describes the protocol as we implement it.
      9
     10Message format
     11--------------
     12
     13Message format between the server and client is in two parts:
     14
     15#. the payload length, a 32bit integer in network endianness
     16#. the payload
     17
     18The payload starts with a 4byte string (without NUL) which is the
     19command. The first command between the server and the client
     20is the only command not encoded on 4 bytes ("Barrier").
     21The remaining part of the payload is decoded according to the command.
     22
     23Protocol Description
     24--------------------
     25
     26This comes from ``barrier/src/lib/barrier/protocol_types.h``.
     27
     28barrierCmdHello  "Barrier"
     29^^^^^^^^^^^^^^^^^^^^^^^^^^
     30
     31Direction:
     32  server -> client
     33Parameters:
     34  ``{ int16_t minor, int16_t major }``
     35Description:
     36  Say hello to client
     37
     38  ``minor`` = protocol major version number supported by server
     39
     40  ``major`` = protocol minor version number supported by server
     41
     42barrierCmdHelloBack  "Barrier"
     43^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
     44
     45Direction:
     46  client ->server
     47Parameters:
     48  ``{ int16_t minor, int16_t major, char *name}``
     49Description:
     50  Respond to hello from server
     51
     52  ``minor`` = protocol major version number supported by client
     53
     54  ``major`` = protocol minor version number supported by client
     55
     56  ``name``  = client name
     57
     58barrierCmdDInfo  "DINF"
     59^^^^^^^^^^^^^^^^^^^^^^^
     60
     61Direction:
     62  client ->server
     63Parameters:
     64  ``{ int16_t x_origin, int16_t y_origin, int16_t width, int16_t height, int16_t x, int16_t y}``
     65Description:
     66  The client screen must send this message in response to the
     67  barrierCmdQInfo message.  It must also send this message when the
     68  screen's resolution changes.  In this case, the client screen should
     69  ignore any barrierCmdDMouseMove messages until it receives a
     70  barrierCmdCInfoAck in order to prevent attempts to move the mouse off
     71  the new screen area.
     72
     73barrierCmdCNoop  "CNOP"
     74^^^^^^^^^^^^^^^^^^^^^^^
     75
     76Direction:
     77  client -> server
     78Parameters:
     79  None
     80Description:
     81  No operation
     82
     83barrierCmdCClose "CBYE"
     84^^^^^^^^^^^^^^^^^^^^^^^
     85
     86Direction:
     87  server -> client
     88Parameters:
     89  None
     90Description:
     91  Close connection
     92
     93barrierCmdCEnter "CINN"
     94^^^^^^^^^^^^^^^^^^^^^^^
     95
     96Direction:
     97  server -> client
     98Parameters:
     99  ``{ int16_t x, int16_t y, int32_t seq, int16_t modifier }``
    100Description:
    101  Enter screen.
    102
    103  ``x``, ``y``  = entering screen absolute coordinates
    104
    105  ``seq``  = sequence number, which is used to order messages between
    106  screens.  the secondary screen must return this number
    107  with some messages
    108
    109  ``modifier`` = modifier key mask.  this will have bits set for each
    110  toggle modifier key that is activated on entry to the
    111  screen.  the secondary screen should adjust its toggle
    112  modifiers to reflect that state.
    113
    114barrierCmdCLeave "COUT"
    115^^^^^^^^^^^^^^^^^^^^^^^
    116
    117Direction:
    118  server -> client
    119Parameters:
    120  None
    121Description:
    122  Leaving screen.  the secondary screen should send clipboard data in
    123  response to this message for those clipboards that it has grabbed
    124  (i.e. has sent a barrierCmdCClipboard for and has not received a
    125  barrierCmdCClipboard for with a greater sequence number) and that
    126  were grabbed or have changed since the last leave.
    127
    128barrierCmdCClipboard "CCLP"
    129^^^^^^^^^^^^^^^^^^^^^^^^^^^
    130
    131Direction:
    132  server -> client
    133Parameters:
    134  ``{ int8_t id, int32_t seq }``
    135Description:
    136  Grab clipboard. Sent by screen when some other app on that screen
    137  grabs a clipboard.
    138
    139  ``id``  = the clipboard identifier
    140
    141  ``seq`` = sequence number. Client must use the sequence number passed in
    142  the most recent barrierCmdCEnter.  the server always sends 0.
    143
    144barrierCmdCScreenSaver   "CSEC"
    145^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    146
    147Direction:
    148  server -> client
    149Parameters:
    150  ``{ int8_t started }``
    151Description:
    152  Screensaver change.
    153
    154  ``started`` = Screensaver on primary has started (1) or closed (0)
    155
    156barrierCmdCResetOptions  "CROP"
    157^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    158
    159Direction:
    160  server -> client
    161Parameters:
    162  None
    163Description:
    164  Reset options. Client should reset all of its options to their
    165  defaults.
    166
    167barrierCmdCInfoAck   "CIAK"
    168^^^^^^^^^^^^^^^^^^^^^^^^^^^
    169
    170Direction:
    171  server -> client
    172Parameters:
    173  None
    174Description:
    175  Resolution change acknowledgment. Sent by server in response to a
    176  client screen's barrierCmdDInfo. This is sent for every
    177  barrierCmdDInfo, whether or not the server had sent a barrierCmdQInfo.
    178
    179barrierCmdCKeepAlive "CALV"
    180^^^^^^^^^^^^^^^^^^^^^^^^^^^
    181
    182Direction:
    183  server -> client
    184Parameters:
    185  None
    186Description:
    187  Keep connection alive. Sent by the server periodically to verify
    188  that connections are still up and running.  clients must reply in
    189  kind on receipt.  if the server gets an error sending the message or
    190  does not receive a reply within a reasonable time then the server
    191  disconnects the client.  if the client doesn't receive these (or any
    192  message) periodically then it should disconnect from the server.  the
    193  appropriate interval is defined by an option.
    194
    195barrierCmdDKeyDown   "DKDN"
    196^^^^^^^^^^^^^^^^^^^^^^^^^^^
    197
    198Direction:
    199  server -> client
    200Parameters:
    201  ``{ int16_t keyid, int16_t modifier [,int16_t button] }``
    202Description:
    203  Key pressed.
    204
    205  ``keyid`` = X11 key id
    206
    207  ``modified`` = modified mask
    208
    209  ``button`` = X11 Xkb keycode (optional)
    210
    211barrierCmdDKeyRepeat "DKRP"
    212^^^^^^^^^^^^^^^^^^^^^^^^^^^
    213
    214Direction:
    215  server -> client
    216Parameters:
    217  ``{ int16_t keyid, int16_t modifier, int16_t repeat [,int16_t button] }``
    218Description:
    219  Key auto-repeat.
    220
    221  ``keyid`` = X11 key id
    222
    223  ``modified`` = modified mask
    224
    225  ``repeat``   = number of repeats
    226
    227  ``button``   = X11 Xkb keycode (optional)
    228
    229barrierCmdDKeyUp "DKUP"
    230^^^^^^^^^^^^^^^^^^^^^^^
    231
    232Direction:
    233  server -> client
    234Parameters:
    235  ``{ int16_t keyid, int16_t modifier [,int16_t button] }``
    236Description:
    237  Key released.
    238
    239  ``keyid`` = X11 key id
    240
    241  ``modified`` = modified mask
    242
    243  ``button`` = X11 Xkb keycode (optional)
    244
    245barrierCmdDMouseDown "DMDN"
    246^^^^^^^^^^^^^^^^^^^^^^^^^^^
    247
    248Direction:
    249  server -> client
    250Parameters:
    251  ``{ int8_t button }``
    252Description:
    253  Mouse button pressed.
    254
    255  ``button`` = button id
    256
    257barrierCmdDMouseUp   "DMUP"
    258^^^^^^^^^^^^^^^^^^^^^^^^^^^
    259
    260Direction:
    261  server -> client
    262Parameters:
    263  ``{ int8_t button }``
    264Description:
    265  Mouse button release.
    266
    267  ``button`` = button id
    268
    269barrierCmdDMouseMove "DMMV"
    270^^^^^^^^^^^^^^^^^^^^^^^^^^^
    271
    272Direction:
    273  server -> client
    274Parameters:
    275  ``{ int16_t x, int16_t y }``
    276Description:
    277  Absolute mouse moved.
    278
    279  ``x``, ``y`` = absolute screen coordinates
    280
    281barrierCmdDMouseRelMove  "DMRM"
    282^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    283
    284Direction:
    285  server -> client
    286Parameters:
    287  ``{ int16_t x, int16_t y }``
    288Description:
    289  Relative mouse moved.
    290
    291  ``x``, ``y`` = r relative screen coordinates
    292
    293barrierCmdDMouseWheel "DMWM"
    294^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    295
    296Direction:
    297  server -> client
    298Parameters:
    299  ``{ int16_t x , int16_t y }`` or ``{ int16_t y }``
    300Description:
    301  Mouse scroll. The delta should be +120 for one tick forward (away
    302  from the user) or right and -120 for one tick backward (toward the
    303  user) or left.
    304
    305  ``x`` = x delta
    306
    307  ``y`` = y delta
    308
    309barrierCmdDClipboard "DCLP"
    310^^^^^^^^^^^^^^^^^^^^^^^^^^^
    311
    312Direction:
    313  server -> client
    314Parameters:
    315  ``{ int8_t id, int32_t seq, int8_t mark, char *data }``
    316Description:
    317  Clipboard data.
    318
    319  ``id``  = clipboard id
    320
    321  ``seq`` = sequence number. The sequence number is 0 when sent by the
    322  server.  Client screens should use the/ sequence number from
    323  the most recent barrierCmdCEnter.
    324
    325barrierCmdDSetOptions "DSOP"
    326^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    327
    328Direction:
    329  server -> client
    330Parameters:
    331  ``{ int32 t nb, { int32_t id, int32_t val }[] }``
    332Description:
    333  Set options. Client should set the given option/value pairs.
    334
    335  ``nb``  = numbers of ``{ id, val }`` entries
    336
    337  ``id``  = option id
    338
    339  ``val`` = option new value
    340
    341barrierCmdDFileTransfer "DFTR"
    342^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    343
    344Direction:
    345  server -> client
    346Parameters:
    347  ``{ int8_t mark, char *content }``
    348Description:
    349  Transfer file data.
    350
    351  * ``mark`` = 0 means the content followed is the file size
    352  * 1 means the content followed is the chunk data
    353  * 2 means the file transfer is finished
    354
    355barrierCmdDDragInfo  "DDRG"
    356^^^^^^^^^^^^^^^^^^^^^^^^^^^
    357
    358Direction:
    359  server -> client
    360Parameters:
    361  ``{ int16_t nb, char *content }``
    362Description:
    363  Drag information.
    364
    365  ``nb``  = number of dragging objects
    366
    367  ``content`` = object's directory
    368
    369barrierCmdQInfo  "QINF"
    370^^^^^^^^^^^^^^^^^^^^^^^
    371
    372Direction:
    373  server -> client
    374Parameters:
    375  None
    376Description:
    377  Query screen info
    378
    379  Client should reply with a barrierCmdDInfo
    380
    381barrierCmdEIncompatible  "EICV"
    382^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
    383
    384Direction:
    385  server -> client
    386Parameters:
    387  ``{ int16_t nb, major *minor }``
    388Description:
    389  Incompatible version.
    390
    391  ``major`` = major version
    392
    393  ``minor`` = minor version
    394
    395barrierCmdEBusy  "EBSY"
    396^^^^^^^^^^^^^^^^^^^^^^^
    397
    398Direction:
    399  server -> client
    400Parameters:
    401  None
    402Description:
    403  Name provided when connecting is already in use.
    404
    405barrierCmdEUnknown   "EUNK"
    406^^^^^^^^^^^^^^^^^^^^^^^^^^^
    407
    408Direction:
    409  server -> client
    410Parameters:
    411  None
    412Description:
    413  Unknown client. Name provided when connecting is not in primary's
    414  screen configuration map.
    415
    416barrierCmdEBad   "EBAD"
    417^^^^^^^^^^^^^^^^^^^^^^^
    418
    419Direction:
    420  server -> client
    421Parameters:
    422  None
    423Description:
    424  Protocol violation. Server should disconnect after sending this
    425  message.
    426