/* send a packet to a specific arp address and ip address by creating our own ip packet */ static int send_packet_to_client(struct dhcpMessage *payload, int force_broadcast) { u_int32_t ciaddr; char chaddr[6]; if (force_broadcast) { DEBUG(LOG_INFO, "broadcasting packet to client (NAK)"); ciaddr = INADDR_BROADCAST; memcpy(chaddr, MAC_BCAST_ADDR, 6); } else if (payload->ciaddr) { DEBUG(LOG_INFO, "unicasting packet to client ciaddr"); ciaddr = payload->ciaddr; memcpy(chaddr, payload->chaddr, 6); } else if (ntohs(payload->flags) & BROADCAST_FLAG) { DEBUG(LOG_INFO, "broadcasting packet to client (requested)"); ciaddr = INADDR_BROADCAST; memcpy(chaddr, MAC_BCAST_ADDR, 6); } else { DEBUG(LOG_INFO, "unicasting packet to client yiaddr"); ciaddr = payload->yiaddr; memcpy(chaddr, payload->chaddr, 6); } return raw_packet(payload, cur_iface->server, SERVER_PORT, ciaddr, CLIENT_PORT, chaddr, cur_iface->ifindex); }
/* send a packet to a specific arp address and ip address by creating our own ip packet */ static int send_packet_to_client(struct dhcpMessage *payload, int force_broadcast) { unsigned char *chaddr; u_int32_t ciaddr; if (force_broadcast) { DEBUG(LOG_INFO, "broadcasting packet to client (NAK)"); ciaddr = INADDR_BROADCAST; chaddr = MAC_BCAST_ADDR; } else if (payload->ciaddr) { DEBUG(LOG_INFO, "unicasting packet to client ciaddr"); ciaddr = payload->ciaddr; chaddr = payload->chaddr; } else if (ntohs(payload->flags) & BROADCAST_FLAG) { DEBUG(LOG_INFO, "broadcasting packet to client (requested)"); ciaddr = INADDR_BROADCAST; chaddr = MAC_BCAST_ADDR; } else { DEBUG(LOG_INFO, "unicasting packet to client yiaddr"); ciaddr = payload->yiaddr; chaddr = payload->chaddr; } return raw_packet(payload, server_config.server, SERVER_PORT, ciaddr, CLIENT_PORT, chaddr, server_config.ifindex); }
/* send a packet to a specific arp address and ip address by creating our own ip packet */ static int send_packet_to_client(struct dhcpMessage *payload, int force_broadcast) { u_int32_t ciaddr; char chaddr[6]; if (force_broadcast) { DEBUG(LOG_INFO, "broadcasting packet to client (NAK)"); ciaddr = INADDR_BROADCAST; memcpy(chaddr, MAC_BCAST_ADDR, 6); } else if (payload->ciaddr) { DEBUG(LOG_INFO, "unicasting packet to client ciaddr"); ciaddr = payload->ciaddr; memcpy(chaddr, payload->chaddr, 6); } else if (ntohs(payload->flags) & BROADCAST_FLAG) { DEBUG(LOG_INFO, "broadcasting packet to client (requested)"); ciaddr = INADDR_BROADCAST; memcpy(chaddr, MAC_BCAST_ADDR, 6); } else { DEBUG(LOG_INFO, "unicasting packet to client yiaddr"); /*w44771 modify for A36D02260, 应该广播ack报文,begin, 2006-7-7*/ //ciaddr = payload->yiaddr; ciaddr = INADDR_BROADCAST; /*w44771 modify for A36D02260, 应该广播ack报文,end, 2006-7-7*/ memcpy(chaddr, payload->chaddr, 6); } return raw_packet(payload, server_config.server, SERVER_PORT, ciaddr, CLIENT_PORT, chaddr, server_config.ifindex); }