ip_packet: Add function to easily encode UDP packets
This commit is contained in:
@@ -435,3 +435,21 @@ ip_packet_t *ip_packet_create_from_data(host_t *src, host_t *dst,
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Described in header.
|
||||||
|
*/
|
||||||
|
ip_packet_t *ip_packet_create_udp_from_data(host_t *src, host_t *dst,
|
||||||
|
chunk_t data)
|
||||||
|
{
|
||||||
|
struct udphdr udp = {
|
||||||
|
.len = htons(8 + data.len),
|
||||||
|
.check = 0,
|
||||||
|
};
|
||||||
|
ip_packet_t *packet;
|
||||||
|
|
||||||
|
data = chunk_cat("cc", chunk_from_thing(udp), data);
|
||||||
|
packet = ip_packet_create_from_data(src, dst, IPPROTO_UDP, data);
|
||||||
|
chunk_free(&data);
|
||||||
|
return packet;
|
||||||
|
}
|
||||||
|
|||||||
@@ -115,4 +115,15 @@ ip_packet_t *ip_packet_create(chunk_t packet);
|
|||||||
ip_packet_t *ip_packet_create_from_data(host_t *src, host_t *dst,
|
ip_packet_t *ip_packet_create_from_data(host_t *src, host_t *dst,
|
||||||
u_int8_t next_header, chunk_t data);
|
u_int8_t next_header, chunk_t data);
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encode a UDP packet from the given data.
|
||||||
|
*
|
||||||
|
* @param src source address and port (cloned)
|
||||||
|
* @param dst destination address and port (cloned)
|
||||||
|
* @param data UDP data (cloned)
|
||||||
|
* @return ip_packet_t instance, or NULL if invalid
|
||||||
|
*/
|
||||||
|
ip_packet_t *ip_packet_create_udp_from_data(host_t *src, host_t *dst,
|
||||||
|
chunk_t data);
|
||||||
|
|
||||||
#endif /** IP_PACKET_H_ @}*/
|
#endif /** IP_PACKET_H_ @}*/
|
||||||
|
|||||||
Reference in New Issue
Block a user