control.h 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354
  1. #ifndef __CONTROL_H__
  2. #define __CONTROL_H__
  3. #define NSCTL_PORT 1702
  4. #define NSCTL_MAGIC 0x9013
  5. /* builtin commands */
  6. #define NSCTL_REQUEST (1 << 4)
  7. #define NSCTL_REQ_LOAD (NSCTL_REQUEST | 1)
  8. #define NSCTL_REQ_UNLOAD (NSCTL_REQUEST | 2)
  9. #define NSCTL_REQ_HELP (NSCTL_REQUEST | 3)
  10. /* general control message, passed to plugins */
  11. #define NSCTL_REQ_CONTROL (NSCTL_REQUEST | 4)
  12. /* response messages */
  13. #define NSCTL_RESPONSE (1 << 5)
  14. #define NSCTL_RES_OK (NSCTL_RESPONSE | 1)
  15. #define NSCTL_RES_ERR (NSCTL_RESPONSE | 2)
  16. /* unpack errors */
  17. #define NSCTL_ERR_SHORT -1 // short packet
  18. #define NSCTL_ERR_LONG -2 // packet exceeds max, or trailing cr*p
  19. #define NSCTL_ERR_MAGIC -3 // invalid magic number
  20. #define NSCTL_ERR_TYPE -4 // unrecognised type
  21. #define NSCTL_MAX_PKT_SZ 4096
  22. struct nsctl_packet {
  23. uint16_t magic;
  24. uint8_t type;
  25. uint8_t argc;
  26. char argv[NSCTL_MAX_PKT_SZ - 4];
  27. } __attribute__ ((packed));
  28. #define NSCTL_MAX_ARG_SZ 512
  29. struct nsctl_args {
  30. uint8_t len;
  31. char value[NSCTL_MAX_ARG_SZ - 1];
  32. } __attribute__ ((packed));
  33. /* parsed packet */
  34. struct nsctl {
  35. uint8_t type;
  36. uint8_t argc;
  37. char *argv[0xff];
  38. };
  39. int pack_control(uint8_t *data, int len, uint8_t type, int argc, char *argv[]);
  40. int unpack_control(struct nsctl *packet, uint8_t *data, int len);
  41. void dump_control(struct nsctl *control, FILE *stream);
  42. #endif /* __CONTROL_H__ */