/*
 * This file is auto-generated. Modifications will be lost.
 *
 * See https://android.googlesource.com/platform/bionic/+/master/libc/kernel/
 * for more information.
 */
#ifndef _LINUX_QRTR_H
#define _LINUX_QRTR_H
#include <linux/socket.h>
#include <linux/types.h>
#define QRTR_NODE_BCAST 0xffffffffu
#define QRTR_PORT_CTRL 0xfffffffeu
struct sockaddr_qrtr {
  __kernel_sa_family_t sq_family;
  __u32 sq_node;
  __u32 sq_port;
};
enum qrtr_pkt_type {
  QRTR_TYPE_DATA = 1,
  QRTR_TYPE_HELLO = 2,
  QRTR_TYPE_BYE = 3,
  QRTR_TYPE_NEW_SERVER = 4,
  QRTR_TYPE_DEL_SERVER = 5,
  QRTR_TYPE_DEL_CLIENT = 6,
  QRTR_TYPE_RESUME_TX = 7,
  QRTR_TYPE_EXIT = 8,
  QRTR_TYPE_PING = 9,
  QRTR_TYPE_NEW_LOOKUP = 10,
  QRTR_TYPE_DEL_LOOKUP = 11,
};
struct qrtr_ctrl_pkt {
  __le32 cmd;
  union {
    struct {
      __le32 service;
      __le32 instance;
      __le32 node;
      __le32 port;
    } server;
    struct {
      __le32 node;
      __le32 port;
    } client;
  };
} __attribute__((__packed__));
#endif
