Update of /cvsroot/dhcp-agent/dhcp-agent/src
In directory sc8-pr-cvs1:/tmp/cvs-serv25527/src
Modified Files:
dhcp-rawnet.c
Log Message:
added routine to do raw processing on udp socket
Index: dhcp-rawnet.c
===================================================================
RCS file: /cvsroot/dhcp-agent/dhcp-agent/src/dhcp-rawnet.c,v
retrieving revision 1.14
retrieving revision 1.15
diff -C2 -d -r1.14 -r1.15
*** dhcp-rawnet.c 25 Jul 2003 02:36:21 -0000 1.14
--- dhcp-rawnet.c 5 Aug 2003 04:53:19 -0000 1.15
***************
*** 473,476 ****
--- 473,530 ----
}
+ /* read a packet from a udp socket, and run it through our stack appropriately. */
+ int rawnet_get_packet_udp_socket(int sockd, rawnet_t *rawnet)
+ {
+ int retval;
+ ip_addr_t ip_addr;
+
+ retval = udp_sock_recv(sockd, rawnet->packet_data, rawnet->mtu, &ip_addr);
+
+ if(retval == -1 || retval == 0) {
+ /* error receiving packet. */
+ return RAWNET_ERROR;
+ }
+
+ /* update our raw network objects as best we can. if someone
+ * is calling us then they cannot expect to get the hardware
+ * address, and everything starts from the IP layer. */
+
+ /* just update protocol and address information for the IP layer. */
+ ip_set_proto(rawnet->ip_p, IPPROTO_UDP);
+ ip_set_src_addr(rawnet->ip_p, ip_addr);
+ ip_set_dst_addr(rawnet->ip_p, rawnet_get_ip_addr(rawnet));
+
+ /* update information for the dhcp packet. */
+ dhcp_purge(rawnet->dhcp_p);
+
+ /* read image. */
+ if(dhcp_read_packet_image(rawnet->dhcp_p, rawnet->packet_data, retval)) {
+ return RAWNET_MALFORMED_PACKET;
+ }
+
+ /* that's it. we're done. */
+ return RAWNET_OK;
+ }
+
+ int rawnet_send_packet_udp_socket_unicast(int sockd, rawnet_t *rawnet, ip_addr_t ip_addr)
+ {
+ if(udp_sock_send(sockd, (rawnet->packet_data + IP_HDR_LEN + UDP_HDR_LEN),
+ (udp_get_len(rawnet->udp_p) - UDP_HDR_LEN),
+ ip_addr, udp_get_dst_port(rawnet->udp_p)))
+ return RAWNET_ERROR;
+
+ return RAWNET_OK;
+ }
+
+ int rawnet_send_packet_udp_socket_broadcast(int sockd, rawnet_t *rawnet)
+ {
+ if(udp_sock_send(sockd, (rawnet->packet_data + IP_HDR_LEN + UDP_HDR_LEN),
+ (udp_get_len(rawnet->udp_p) - UDP_HDR_LEN),
+ ip_addr_broadcast, udp_get_dst_port(rawnet->udp_p)))
+ return RAWNET_ERROR;
+
+ return RAWNET_OK;
+ }
+
/*
* rawnet get packet:
|