packet_builder/
payload.rs

1use std::net::Ipv4Addr;
2use L4Checksum;
3
4impl <'p>L4Checksum for PayloadData<'p> {
5  fn checksum_ipv4(&mut self, _source: &Ipv4Addr, _destination: &Ipv4Addr) -> () {
6    // The payload has no checksum we just need to implement the trait.
7  }
8}
9
10pub struct PayloadData<'p> {
11  pub data: &'p mut[u8],
12}
13
14// Implement the pnet Packet trait so we can use the same interface in the macro for getting the
15// data.
16impl <'p>pnet::packet::Packet for PayloadData<'p> {
17    fn packet(& self) -> & [u8] { &self.data[..] }
18    fn payload(& self) -> & [u8] { &self.data[..] }
19}
20
21#[macro_export]
22macro_rules! payload {
23   ($value:expr, $buf:expr) => {{
24     let buf_len = $buf.len();
25     let pdata =  PayloadData {
26       data : &mut$buf[buf_len - $value.len()..],
27     };
28     for i in 0..$value.len() {
29      pdata.data[i] = $value[i];
30     }
31     (pdata, None as Option<&u16>)
32   }};
33}
34