rama_haproxy/protocol/
ip.rs

1//! Models for storing IP v4 and v6 addresses and ports.
2
3use std::net::{Ipv4Addr, Ipv6Addr};
4
5/// The source and destination IPv4 addresses and TCP ports of a header.
6#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
7pub struct IPv4 {
8    /// The source IPv4 address.
9    pub source_address: Ipv4Addr,
10    /// The source TCP/UDP port.
11    pub source_port: u16,
12    /// The destination IPv4 address.
13    pub destination_address: Ipv4Addr,
14    /// The destination TCP/UDP port.
15    pub destination_port: u16,
16}
17
18impl IPv4 {
19    /// Create a new IPv4 addresses.
20    pub fn new<T: Into<Ipv4Addr>>(
21        source_address: T,
22        destination_address: T,
23        source_port: u16,
24        destination_port: u16,
25    ) -> Self {
26        IPv4 {
27            source_address: source_address.into(),
28            source_port,
29            destination_address: destination_address.into(),
30            destination_port,
31        }
32    }
33}
34/// The source and destination IPv6 addresses and TCP ports of a header.
35#[derive(Copy, Clone, Debug, PartialEq, Eq, Hash)]
36pub struct IPv6 {
37    /// The source IPv6 address.
38    pub source_address: Ipv6Addr,
39    /// The source TCP/UDP port.
40    pub source_port: u16,
41    /// The destination IPv6 address.
42    pub destination_address: Ipv6Addr,
43    /// The destination TCP/UDP port.
44    pub destination_port: u16,
45}
46
47impl IPv6 {
48    /// Create a new IPv6 addresses.
49    pub fn new<T: Into<Ipv6Addr>>(
50        source_address: T,
51        destination_address: T,
52        source_port: u16,
53        destination_port: u16,
54    ) -> Self {
55        IPv6 {
56            source_address: source_address.into(),
57            source_port,
58            destination_address: destination_address.into(),
59            destination_port,
60        }
61    }
62}