bench.rs 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. #![feature(test)]
  2. mod wire {
  3. use test;
  4. #[cfg(feature = "proto-ipv6")]
  5. use smoltcp::wire::{Ipv6Address, Ipv6Repr, Ipv6Packet};
  6. #[cfg(feature = "proto-ipv4")]
  7. use smoltcp::wire::{Ipv4Address, Ipv4Repr, Ipv4Packet};
  8. use smoltcp::phy::{ChecksumCapabilities};
  9. use smoltcp::wire::{IpAddress, IpProtocol};
  10. use smoltcp::wire::{TcpRepr, TcpPacket, TcpSeqNumber, TcpControl};
  11. use smoltcp::wire::{UdpRepr, UdpPacket};
  12. #[cfg(feature = "proto-ipv6")]
  13. const SRC_ADDR: IpAddress = IpAddress::Ipv6(Ipv6Address([0xfe, 0x80, 0, 0, 0, 0, 0, 0,
  14. 0, 0, 0, 0, 0, 0, 0, 1]));
  15. #[cfg(feature = "proto-ipv6")]
  16. const DST_ADDR: IpAddress = IpAddress::Ipv6(Ipv6Address([0xfe, 0x80, 0, 0, 0, 0, 0, 0,
  17. 0, 0, 0, 0, 0, 0, 0, 2]));
  18. #[cfg(all(not(feature = "proto-ipv6"), feature = "proto-ipv4"))]
  19. const SRC_ADDR: IpAddress = IpAddress::Ipv4(Ipv4Address([192, 168, 1, 1]));
  20. #[cfg(all(not(feature = "proto-ipv6"), feature = "proto-ipv4"))]
  21. const DST_ADDR: IpAddress = IpAddress::Ipv4(Ipv4Address([192, 168, 1, 2]));
  22. #[bench]
  23. #[cfg(any(feature = "proto-ipv6", feature = "proto-ipv4"))]
  24. fn bench_emit_tcp(b: &mut test::Bencher) {
  25. static PAYLOAD_BYTES: [u8; 400] =
  26. [0x2a; 400];
  27. let repr = TcpRepr {
  28. src_port: 48896,
  29. dst_port: 80,
  30. seq_number: TcpSeqNumber(0x01234567),
  31. ack_number: None,
  32. window_len: 0x0123,
  33. control: TcpControl::Syn,
  34. max_seg_size: None,
  35. window_scale: None,
  36. payload: &PAYLOAD_BYTES
  37. };
  38. let mut bytes = vec![0xa5; repr.buffer_len()];
  39. b.iter(|| {
  40. let mut packet = TcpPacket::new(&mut bytes);
  41. repr.emit(&mut packet, &SRC_ADDR, &DST_ADDR, &ChecksumCapabilities::default());
  42. });
  43. }
  44. #[bench]
  45. #[cfg(any(feature = "proto-ipv6", feature = "proto-ipv4"))]
  46. fn bench_emit_udp(b: &mut test::Bencher) {
  47. static PAYLOAD_BYTES: [u8; 400] =
  48. [0x2a; 400];
  49. let repr = UdpRepr {
  50. src_port: 48896,
  51. dst_port: 80,
  52. payload: &PAYLOAD_BYTES
  53. };
  54. let mut bytes = vec![0xa5; repr.buffer_len()];
  55. b.iter(|| {
  56. let mut packet = UdpPacket::new(&mut bytes);
  57. repr.emit(&mut packet, &SRC_ADDR, &DST_ADDR, &ChecksumCapabilities::default());
  58. });
  59. }
  60. #[bench]
  61. #[cfg(feature = "proto-ipv4")]
  62. fn bench_emit_ipv4(b: &mut test::Bencher) {
  63. let repr = Ipv4Repr {
  64. src_addr: Ipv4Address([192, 168, 1, 1]),
  65. dst_addr: Ipv4Address([192, 168, 1, 2]),
  66. protocol: IpProtocol::Tcp,
  67. payload_len: 100,
  68. hop_limit: 64
  69. };
  70. let mut bytes = vec![0xa5; repr.buffer_len()];
  71. b.iter(|| {
  72. let mut packet = Ipv4Packet::new(&mut bytes);
  73. repr.emit(&mut packet, &ChecksumCapabilities::default());
  74. });
  75. }
  76. #[bench]
  77. #[cfg(feature = "proto-ipv6")]
  78. fn bench_emit_ipv6(b: &mut test::Bencher) {
  79. let repr = Ipv6Repr {
  80. src_addr: Ipv6Address([0xfe, 0x80, 0, 0, 0, 0, 0, 0,
  81. 0, 0, 0, 0, 0, 0, 0, 1]),
  82. dst_addr: Ipv6Address([0xfe, 0x80, 0, 0, 0, 0, 0, 0,
  83. 0, 0, 0, 0, 0, 0, 0, 2]),
  84. next_header: IpProtocol::Tcp,
  85. payload_len: 100,
  86. hop_limit: 64
  87. };
  88. let mut bytes = vec![0xa5; repr.buffer_len()];
  89. b.iter(|| {
  90. let mut packet = Ipv6Packet::new(&mut bytes);
  91. repr.emit(&mut packet);
  92. });
  93. }
  94. }