BOOL CEtherArpHandler::isReply(arp_t* arp_pkt) { LOG_IF_RETURN (NULL == arp_pkt, FALSE, "arp pointer is NULL"); BOOL value = (arp_pkt->opcode == htons(bnc::constant::ARP_CODE_REPLY)) ? TRUE : FALSE; return value; }
BOOL CEtherArpHandler::create_arp_request_flood_pkt(arp_t* arp_pkt, CHost* src, UINT4 dst_ip) { LOG_IF_RETURN ((NULL == arp_pkt) || (NULL == src), FALSE, "create arp reply packet failed. pointer is NULL."); create_arp_pkt(arp_pkt, bnc::constant::ARP_CODE_REQUEST, src->getMac(), BROADCAST_MAC, src->getIp(), dst_ip); return TRUE; }
BOOL CEtherArpHandler::create_arp_reply_pkt(arp_t* arp_pkt, CHost* src, CHost* dst) { LOG_IF_RETURN ((NULL == arp_pkt) || (NULL == src) || (NULL == dst), FALSE, "create arp reply packet failed. pointer is NULL."); create_arp_pkt(arp_pkt, bnc::constant::ARP_CODE_REPLY, dst->getMac(), src->getMac(), dst->getIp(), src->getIp()); return TRUE; }
/** * @brief try the best to read @a size bytes from the fd * * @param fd * @param data * @param size * * @return 1. OK: val equals @a size 2. Riched the END: 0 <= val < @a size 3. -1 on Error */ int read_n_l (int fd, void *data, size_t size) { int done_size = 0; const int total_size = size; uint8_t *pbuf = (uint8_t*)(data); while (done_size != total_size) { int once = read(fd, pbuf, total_size-done_size); LOG_IF_RETURN_CODE(once == 0, done_size, "peer closed the socket, finished reading %d bytes", done_size); LOG_IF_RETURN(once < 0, "ERR: while reading socket:%d perror:%s", fd, strerror(errno)); done_size += once; pbuf += once; } LOGFL("read_n with %d:%d bytes ok", done_size, size); return done_size; }
int main(int argc, char **argv) { int fd; struct binder_state *bs; void *svcmgr = BINDER_SERVICE_MANAGER; bs = binder_open(128*1024); LOG_IF_RETURN(bs == NULL, "ERR: bs is NULL!"); argc--; argv++; while (argc > 0) { if (!strcmp(argv[0],"alt")) { void *ptr = svcmgr_lookup(bs, svcmgr, "alt_svc_mgr"); if (!ptr) { fprintf(stderr,"cannot find alt_svc_mgr\n"); return -1; } svcmgr = ptr; fprintf(stderr,"svcmgr is via %p\n", ptr); } else if (!strcmp(argv[0],"lookup")) { void *ptr; if (argc < 2) { fprintf(stderr,"argument required\n"); return -1; } ptr = svcmgr_lookup(bs, svcmgr, argv[1]); fprintf(stderr,"lookup(%s) = %p\n", argv[1], ptr); argc--; argv++; } else if (!strcmp(argv[0],"publish")) { if (argc < 2) { fprintf(stderr,"argument required\n"); return -1; } svcmgr_publish(bs, svcmgr, argv[1], &token); argc--; argv++; } else { fprintf(stderr,"unknown command %s\n", argv[0]); return -1; } argc--; argv++; } return 0; }
BOOL CEtherArpHandler::create_arp_pkt(arp_t* arp_pkt, UINT2 code, UINT1* src_mac, UINT1* dst_mac, UINT4 src_ip, UINT4 dst_ip) { LOG_IF_RETURN ((NULL == arp_pkt) || (NULL == src_mac) || (NULL == dst_mac), FALSE, "create arp packet failed. pointer is NULL."); memset(arp_pkt, sizeof(arp_t), 0); memcpy(arp_pkt->eth_head.src, src_mac, 6); memcpy(arp_pkt->eth_head.dest, dst_mac, 6); arp_pkt->eth_head.proto = htons(ETHER_ARP); arp_pkt->hardwaretype = htons(1); arp_pkt->prototype = htons(ETHER_IP); arp_pkt->hardwaresize = 0x6; arp_pkt->protocolsize = 0x4; arp_pkt->opcode = htons(code); arp_pkt->sendip = src_ip; arp_pkt->targetip= dst_ip; memcpy(arp_pkt->sendmac, src_mac, 6); memcpy(arp_pkt->targetmac, dst_mac, 6); return TRUE; }