X-Git-Url: https://git.librecmc.org/?a=blobdiff_plain;f=nmrpd.h;h=0773777c5e255e894b3f90950a7255fa97c40eb0;hb=b3ba1c016b8fb2c970da9aae3fcb48fb4c255c94;hp=841b4f3758ef82d78d0b1e1a3d4e69e6c03e0559;hpb=d7caf78f5ebaf37e7099f470bf360e62e36fc02a;p=oweals%2Fnmrpflash.git diff --git a/nmrpd.h b/nmrpd.h index 841b4f3..0773777 100644 --- a/nmrpd.h +++ b/nmrpd.h @@ -20,17 +20,26 @@ #ifndef NMRPD_H #define NMRPD_H #include +#include #include #if defined(_WIN32) || defined(_WIN64) -#define NMRPFLASH_WINDOWS -#elif defined(__linux__) -#define NMRPFLASH_LINUX +# define NMRPFLASH_WINDOWS #elif defined(__APPLE__) && defined(__MACH__) -#define NMRPFLASH_OSX -#elif defined(__unix__) -#define NMRPFLASH_UNIX -#warning "nmrpflash is not fully supported on your operating system" +# define NMRPFLASH_UNIX +# define NMRPFLASH_OSX +# define NMRPFLASH_BSD +#elif defined (__unix__) +# define NMRPFLASH_UNIX +# if defined(__linux__) +# define NMRPFLASH_LINUX +# elif defined(__FreeBSD__) || defined(__NetBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) +# define NMRPFLASH_BSD +# else +# warning "nmrpflash is not fully supported on this platform" +# endif +#else +# warning "nmrpflash is not supported on this platform" #endif #ifndef NMRPFLASH_WINDOWS @@ -53,6 +62,18 @@ #define MIN(a, b) ((a) < (b) ? (a) : (b)) #endif +#ifndef PACKED +#define PACKED __attribute__((packed)) +#endif + +#define NMRPFLASH_SET_REGION + +struct eth_hdr { + uint8_t ether_dhost[6]; + uint8_t ether_shost[6]; + uint16_t ether_type; +} PACKED; + enum nmrp_op { NMRP_UPLOAD_FW = 0, NMRP_UPLOAD_ST = 1, @@ -65,6 +86,7 @@ struct nmrpd_args { const char *tftpcmd; const char *file_local; const char *file_remote; + const char *ipaddr_intf; const char *ipaddr; const char *ipmask; const char *intf; @@ -87,12 +109,14 @@ const char *mac_to_str(uint8_t *mac); void win_perror2(const char *msg, DWORD err); void sock_perror(const char *msg); #else -#define sock_perror(x) perror(x) +#define sock_perror(x) xperror(x) #endif extern int verbosity; struct ethsock; +struct ethsock_arp_undo; +struct ethsock_ip_undo; struct ethsock *ethsock_create(const char *intf, uint16_t protocol); int ethsock_close(struct ethsock *sock); @@ -100,6 +124,8 @@ int ethsock_send(struct ethsock *sock, void *buf, size_t len); ssize_t ethsock_recv(struct ethsock *sock, void *buf, size_t len); int ethsock_set_timeout(struct ethsock *sock, unsigned msec); uint8_t *ethsock_get_hwaddr(struct ethsock *sock); +int ethsock_arp_add(struct ethsock *sock, uint8_t *hwaddr, uint32_t ipaddr, struct ethsock_arp_undo **undo); +int ethsock_arp_del(struct ethsock *sock, struct ethsock_arp_undo **undo); int ethsock_list_all(void); struct ethsock_ip_callback_args @@ -112,4 +138,15 @@ struct ethsock_ip_callback_args typedef int (*ethsock_ip_callback_t)(struct ethsock_ip_callback_args *args); int ethsock_for_each_ip(struct ethsock *sock, ethsock_ip_callback_t callback, void *arg); + +int ethsock_ip_add(struct ethsock *sock, uint32_t ipaddr, uint32_t ipmask, struct ethsock_ip_undo **undo); +int ethsock_ip_del(struct ethsock *sock, struct ethsock_ip_undo **undo); + +time_t time_monotonic(); +char *lltostr(long long ll, int base); +uint32_t bitcount(uint32_t n); +uint32_t netmask(uint32_t count); +void xperror(const char *msg); + +extern volatile sig_atomic_t g_interrupted; #endif