Lines Matching refs:fields
56 my %fields;
57 @fields{qw(dst src type)} = unpack("a6 a6 n", $ether);
59 $fields{"${addr}_str"} = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
60 unpack("C6", $fields{$addr}));
62 $fields{type_hex} = sprintf("0x%04x", $fields{type});
64 return %fields;
68 my $fields = shift;
72 $$fields{$addr} =
73 pack("C6", map { hex $_ } split(/:/, $$fields{"${addr}_str"}));
75 my $packet = pack("a6 a6 n", @$fields{qw(dst src type)});
86 my %fields;
87 @fields{qw(hdr sha spa tha tpa)} = unpack("a8 a6 a4 a6 a4", $arp);
89 $fields{"${addr}_str"} = sprintf("%02x:%02x:%02x:%02x:%02x:%02x",
90 unpack("C6", $fields{$addr}));
93 $fields{"${addr}_str"} = join(".", unpack("C4", $fields{$addr}));
95 @fields{qw(hrd pro hln pln op)} = unpack("n n C C n", $fields{hdr});
97 return %fields;
101 my $fields = shift;
105 $$fields{$addr} =
106 pack("C6", map { hex $_ } split(/:/, $$fields{"${addr}_str"}));
109 $$fields{$addr} = pack("C4", split(/\./, $$fields{"${addr}_str"}));
111 $$fields{hdr} = pack("n n C C n", @$fields{qw(hrd pro hln pln op)});
112 my $packet = pack("a8 a6 a4 a6 a4", @$fields{qw(hdr sha spa tha tpa)});
122 my %fields;
123 @fields{qw(hlv tos len id off ttl p sum src dst)} =
125 $fields{hlen} = ($fields{hlv} & 0x0f) << 2;
126 $fields{v} = ($fields{hlv} >> 4) & 0x0f;
128 $fields{v} == 4 or croak "ip version is not 4: $fields{v}";
129 $fields{hlen} >= 20 or croak "ip header length too small: $fields{hlen}";
130 if ($fields{hlen} > 20) {
131 $fields{options} = substr($$packet, 0, 20 - $fields{hlen}, "");
134 $fields{"${addr}_str"} = join(".", unpack("C4", $fields{$addr}));
137 return %fields;
141 my $fields = shift;
144 $$fields{options} //= "";
146 $$fields{hlen} = 20 + length($$fields{options});
147 $$fields{hlen} & 3 and croak "bad ip header length: $$fields{hlen}";
148 $$fields{hlen} < 20
149 and croak "ip header length too small: $$fields{hlen}";
150 ($$fields{hlen} >> 2) > 0x0f
151 and croak "ip header length too big: $$fields{hlen}";
152 $$fields{v} = 4;
153 $$fields{hlv} =
154 (($$fields{v} << 4) & 0xf0) | (($$fields{hlen} >> 2) & 0x0f);
156 $$fields{len} = $$fields{hlen} + length($subpacket);
159 $$fields{$addr} = pack("C4", split(/\./, $$fields{"${addr}_str"}));
162 @$fields{qw(hlv tos len id off ttl p src dst)});
163 $$fields{sum} = ip_checksum($packet);
164 substr($packet, 10, 2, pack("n", $$fields{sum}));
165 $packet .= pack("a*", $$fields{options});
175 my %fields;
176 @fields{qw(version type packet_length router_id area_id checksum autype
179 $fields{version} == 2 or croak "ospf version is not 2: $fields{v}";
181 $fields{"${addr}_str"} = join(".", unpack("C4", $fields{$addr}));
184 return %fields;
188 my $fields = shift;
191 $$fields{packet_length} = 24 + length($subpacket);
192 $$fields{authentication} = "" if $$fields{autype} == 0;
195 if ($$fields{"${addr}_str"}) {
196 $$fields{$addr} = pack("C4", split(/\./, $$fields{"${addr}_str"}));
200 @$fields{qw(version type packet_length router_id area_id autype)});
201 $$fields{checksum} = ip_checksum($packet. $subpacket);
202 substr($packet, 12, 2, pack("n", $$fields{checksum}));
203 $packet .= pack("a8", $$fields{authentication});
214 my %fields;
215 @fields{qw(network_mask hellointerval options rtr_pri
220 $fields{"${addr}_str"} = join(".", unpack("C4", $fields{$addr}));
224 $fields{neighbors} = [unpack("a4" x $n, $$packet)];
226 foreach my $addr (@{$fields{neighbors}}) {
227 push @{$fields{neighbors_str}}, join(".", unpack("C4", $addr));
230 return %fields;
239 my %fields;
240 @fields{qw(interface_mtu options bits dd_sequence_number)} =
242 $fields{bits} <= 7
245 return %fields;
249 my $fields = shift;
251 $$fields{neighbors_str} //= [];
252 $$fields{neighbors} //= [];
256 if ($$fields{"${addr}_str"}) {
257 $$fields{$addr} = pack("C4", split(/\./, $$fields{"${addr}_str"}));
261 @$fields{qw(network_mask hellointerval options rtr_pri
264 if ($$fields{neighbors_str}) {
265 $$fields{neighbors} = [];
267 foreach my $str (@{$$fields{neighbors_str}}) {
268 push @{$$fields{neighbors}}, pack("C4", split(/\./, $str));
270 my $n = @{$$fields{neighbors}};
271 $packet .= pack("a4" x $n, @{$$fields{neighbors}});
277 my $fields = shift;
280 @$fields{qw(interface_mtu options bits dd_sequence_number)});