4 #include "arch/low/general.h"
5 #include "packet_builder.h"
8 class arp_packet
: public packet_builder
{
22 } __attribute__((packed
));
27 arp_packet() : pkg(new packet
) { }
32 buffer
generate() const {
33 return buffer::to_mem(pkg
);
36 void add_data(const buffer
&) { }
46 void set_ptype(ptypes pt
) {
47 pkg
->ptype
= to_be16(pt
);
48 pkg
->plen
= ipv4_addr::in_bytes();
51 void set_htype(htypes ht
) {
52 pkg
->htype
= to_be16(ht
);
53 pkg
->hlen
= mac_addr::in_bytes();
61 void set_type(arp_type at
) {
62 pkg
->oper
= to_be16(at
);
65 void set_source_haddr(const mac_addr
&addr
) {
66 pkg
->sha0
= addr
.first_be32();
67 pkg
->sha1
= addr
.last_be16();
70 void set_source_paddr(const ipv4_addr
&addr
) {
71 pkg
->spa
= addr
.to_be();
74 void set_target_haddr(const mac_addr
&addr
) {
75 pkg
->tha0
= addr
.first_be16();
76 pkg
->tha1
= addr
.last_be32();
79 void set_target_paddr(const ipv4_addr
&addr
) {
80 pkg
->tpa
= addr
.to_be();
83 arp_packet(const buffer
&x
) : pkg(x
.cast
<packet
>()) { }
85 ptypes
get_ptype() const {
86 return (ptypes
)from_be16(pkg
->ptype
);
89 htypes
get_htype() const {
90 return (htypes
)from_be16(pkg
->htype
);
93 arp_type
get_type() const {
94 return (arp_type
)from_be16(pkg
->oper
);
97 mac_addr
get_source_haddr() const {
98 return mac_addr::from_be(pkg
->sha0
, pkg
->sha1
);
101 ipv4_addr
get_source_paddr() const {
102 return ipv4_addr::from_be(pkg
->spa
);
105 mac_addr
get_target_haddr() const {
106 return mac_addr::from_be_r(pkg
->tha0
, pkg
->tha1
);
109 ipv4_addr
get_target_paddr() const {
110 return ipv4_addr::from_be(pkg
->tpa
);