net.h 3.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. #ifndef QEMU_NET_H
  2. #define QEMU_NET_H
  3. #include "qemu-common.h"
  4. /* VLANs support */
  5. typedef ssize_t (IOReadvHandler)(void *, const struct iovec *, int);
  6. typedef struct VLANClientState VLANClientState;
  7. typedef void (NetCleanup) (VLANClientState *);
  8. typedef void (LinkStatusChanged)(VLANClientState *);
  9. struct VLANClientState {
  10. IOReadHandler *fd_read;
  11. IOReadvHandler *fd_readv;
  12. /* Packets may still be sent if this returns zero. It's used to
  13. rate-limit the slirp code. */
  14. IOCanRWHandler *fd_can_read;
  15. NetCleanup *cleanup;
  16. LinkStatusChanged *link_status_changed;
  17. int link_down;
  18. void *opaque;
  19. struct VLANClientState *next;
  20. struct VLANState *vlan;
  21. char *model;
  22. char *name;
  23. char info_str[256];
  24. };
  25. struct VLANState {
  26. int id;
  27. VLANClientState *first_client;
  28. struct VLANState *next;
  29. unsigned int nb_guest_devs, nb_host_devs;
  30. };
  31. VLANState *qemu_find_vlan(int id);
  32. VLANClientState *qemu_new_vlan_client(VLANState *vlan,
  33. const char *model,
  34. const char *name,
  35. IOReadHandler *fd_read,
  36. IOCanRWHandler *fd_can_read,
  37. NetCleanup *cleanup,
  38. void *opaque);
  39. void qemu_del_vlan_client(VLANClientState *vc);
  40. VLANClientState *qemu_find_vlan_client(VLANState *vlan, void *opaque);
  41. int qemu_can_send_packet(VLANClientState *vc);
  42. ssize_t qemu_sendv_packet(VLANClientState *vc, const struct iovec *iov,
  43. int iovcnt);
  44. void qemu_send_packet(VLANClientState *vc, const uint8_t *buf, int size);
  45. void qemu_format_nic_info_str(VLANClientState *vc, uint8_t macaddr[6]);
  46. void qemu_check_nic_model(NICInfo *nd, const char *model);
  47. void qemu_check_nic_model_list(NICInfo *nd, const char * const *models,
  48. const char *default_model);
  49. void qemu_handler_true(void *opaque);
  50. void do_info_network(void);
  51. int do_set_link(const char *name, const char *up_or_down);
  52. /* NIC info */
  53. #define MAX_NICS 8
  54. struct NICInfo {
  55. uint8_t macaddr[6];
  56. const char *model;
  57. const char *name;
  58. VLANState *vlan;
  59. VLANClientState *vc;
  60. void *private;
  61. int used;
  62. };
  63. extern int nb_nics;
  64. extern NICInfo nd_table[MAX_NICS];
  65. /* BT HCI info */
  66. struct HCIInfo {
  67. int (*bdaddr_set)(struct HCIInfo *hci, const uint8_t *bd_addr);
  68. void (*cmd_send)(struct HCIInfo *hci, const uint8_t *data, int len);
  69. void (*sco_send)(struct HCIInfo *hci, const uint8_t *data, int len);
  70. void (*acl_send)(struct HCIInfo *hci, const uint8_t *data, int len);
  71. void *opaque;
  72. void (*evt_recv)(void *opaque, const uint8_t *data, int len);
  73. void (*acl_recv)(void *opaque, const uint8_t *data, int len);
  74. };
  75. struct HCIInfo *qemu_next_hci(void);
  76. /* checksumming functions (net-checksum.c) */
  77. uint32_t net_checksum_add(int len, uint8_t *buf);
  78. uint16_t net_checksum_finish(uint32_t sum);
  79. uint16_t net_checksum_tcpudp(uint16_t length, uint16_t proto,
  80. uint8_t *addrs, uint8_t *buf);
  81. void net_checksum_calculate(uint8_t *data, int length);
  82. /* from net.c */
  83. int net_client_init(const char *device, const char *p);
  84. void net_client_uninit(NICInfo *nd);
  85. int net_client_parse(const char *str);
  86. void net_slirp_smb(const char *exported_dir);
  87. void net_slirp_redir(const char *redir_str);
  88. void net_cleanup(void);
  89. int slirp_is_inited(void);
  90. void net_client_check(void);
  91. void net_host_device_add(const char *device, const char *opts);
  92. void net_host_device_remove(int vlan_id, const char *device);
  93. #define DEFAULT_NETWORK_SCRIPT "/etc/qemu-ifup"
  94. #define DEFAULT_NETWORK_DOWN_SCRIPT "/etc/qemu-ifdown"
  95. #ifdef __sun__
  96. #define SMBD_COMMAND "/usr/sfw/sbin/smbd"
  97. #else
  98. #define SMBD_COMMAND "/usr/sbin/smbd"
  99. #endif
  100. #endif