packetfu 1.1.8 → 1.1.9

Sign up to get free protection for your applications and to get access to all the features.
Files changed (84) hide show
  1. data/README.rdoc +11 -12
  2. data/bench/octets.rb +9 -9
  3. data/examples/100kpackets.rb +13 -12
  4. data/examples/ackscan.rb +17 -16
  5. data/examples/arp.rb +36 -35
  6. data/examples/arphood.rb +37 -36
  7. data/examples/dissect_thinger.rb +7 -6
  8. data/examples/ethernet.rb +1 -0
  9. data/examples/examples.rb +1 -0
  10. data/examples/ifconfig.rb +1 -0
  11. data/examples/new-simple-stats.rb +24 -23
  12. data/examples/packetfu-shell.rb +26 -25
  13. data/examples/simple-sniffer.rb +10 -9
  14. data/examples/simple-stats.rb +24 -23
  15. data/examples/slammer.rb +4 -3
  16. data/lib/packetfu.rb +128 -127
  17. data/lib/packetfu/capture.rb +170 -169
  18. data/lib/packetfu/config.rb +53 -52
  19. data/lib/packetfu/inject.rb +57 -56
  20. data/lib/packetfu/packet.rb +529 -528
  21. data/lib/packetfu/pcap.rb +580 -579
  22. data/lib/packetfu/protos/arp.rb +91 -90
  23. data/lib/packetfu/protos/arp/header.rb +159 -158
  24. data/lib/packetfu/protos/arp/mixin.rb +37 -36
  25. data/lib/packetfu/protos/eth.rb +45 -44
  26. data/lib/packetfu/protos/eth/header.rb +244 -243
  27. data/lib/packetfu/protos/eth/mixin.rb +4 -3
  28. data/lib/packetfu/protos/hsrp.rb +70 -69
  29. data/lib/packetfu/protos/hsrp/header.rb +108 -107
  30. data/lib/packetfu/protos/hsrp/mixin.rb +30 -29
  31. data/lib/packetfu/protos/icmp.rb +72 -71
  32. data/lib/packetfu/protos/icmp/header.rb +83 -82
  33. data/lib/packetfu/protos/icmp/mixin.rb +15 -14
  34. data/lib/packetfu/protos/invalid.rb +50 -49
  35. data/lib/packetfu/protos/ip.rb +70 -69
  36. data/lib/packetfu/protos/ip/header.rb +292 -291
  37. data/lib/packetfu/protos/ip/mixin.rb +41 -40
  38. data/lib/packetfu/protos/ipv6.rb +51 -50
  39. data/lib/packetfu/protos/ipv6/header.rb +189 -188
  40. data/lib/packetfu/protos/ipv6/mixin.rb +30 -29
  41. data/lib/packetfu/protos/lldp.rb +3 -1
  42. data/lib/packetfu/protos/lldp/header.rb +1 -0
  43. data/lib/packetfu/protos/lldp/mixin.rb +1 -0
  44. data/lib/packetfu/protos/tcp.rb +177 -176
  45. data/lib/packetfu/protos/tcp/ecn.rb +36 -35
  46. data/lib/packetfu/protos/tcp/flags.rb +75 -74
  47. data/lib/packetfu/protos/tcp/header.rb +269 -268
  48. data/lib/packetfu/protos/tcp/hlen.rb +33 -32
  49. data/lib/packetfu/protos/tcp/mixin.rb +47 -46
  50. data/lib/packetfu/protos/tcp/option.rb +322 -321
  51. data/lib/packetfu/protos/tcp/options.rb +96 -95
  52. data/lib/packetfu/protos/tcp/reserved.rb +36 -35
  53. data/lib/packetfu/protos/udp.rb +117 -116
  54. data/lib/packetfu/protos/udp/header.rb +92 -91
  55. data/lib/packetfu/protos/udp/mixin.rb +4 -3
  56. data/lib/packetfu/structfu.rb +281 -280
  57. data/lib/packetfu/utils.rb +211 -208
  58. data/lib/packetfu/version.rb +42 -41
  59. data/packetfu.gemspec +1 -1
  60. data/spec/ethpacket_spec.rb +48 -48
  61. data/spec/packet_spec.rb +57 -57
  62. data/spec/packet_subclasses_spec.rb +8 -8
  63. data/spec/packetfu_spec.rb +59 -59
  64. data/spec/structfu_spec.rb +268 -268
  65. data/spec/tcp_spec.rb +75 -75
  66. data/test/all_tests.rb +13 -13
  67. data/test/func_lldp.rb +3 -3
  68. data/test/ptest.rb +2 -2
  69. data/test/test_arp.rb +116 -116
  70. data/test/test_capture.rb +45 -45
  71. data/test/test_eth.rb +68 -68
  72. data/test/test_hsrp.rb +9 -9
  73. data/test/test_icmp.rb +52 -52
  74. data/test/test_inject.rb +18 -18
  75. data/test/test_invalid.rb +16 -16
  76. data/test/test_ip.rb +36 -36
  77. data/test/test_ip6.rb +48 -48
  78. data/test/test_octets.rb +21 -21
  79. data/test/test_packet.rb +154 -154
  80. data/test/test_pcap.rb +170 -170
  81. data/test/test_structfu.rb +97 -97
  82. data/test/test_tcp.rb +320 -320
  83. data/test/test_udp.rb +76 -76
  84. metadata +2 -2
@@ -1,7 +1,8 @@
1
+ # -*- coding: binary -*-
1
2
  module PacketFu
2
- # This Mixin simplifies access to the EthHeaders. Mix this in with your
3
- # packet interface, and it will add methods that essentially delegate to
4
- # the 'eth_header' method (assuming that it is a EthHeader object)
3
+ # This Mixin simplifies access to the EthHeaders. Mix this in with your
4
+ # packet interface, and it will add methods that essentially delegate to
5
+ # the 'eth_header' method (assuming that it is a EthHeader object)
5
6
  module EthHeaderMixin
6
7
  def eth_daddr; self.eth_header.eth_daddr ; end
7
8
  def eth_daddr=(v); self.eth_header.eth_daddr= v; end
@@ -1,3 +1,4 @@
1
+ # -*- coding: binary -*-
1
2
  require 'packetfu/protos/eth/header'
2
3
  require 'packetfu/protos/eth/mixin'
3
4
 
@@ -11,85 +12,85 @@ require 'packetfu/protos/hsrp/header'
11
12
  require 'packetfu/protos/hsrp/mixin'
12
13
 
13
14
  module PacketFu
14
- # HSRPPacket is used to construct HSRP Packets. They contain an EthHeader, an IPHeader, and a UDPHeader.
15
- #
16
- # == Example
17
- #
18
- # hsrp_pkt.new
19
- # hsrp_pkt.hsrp_opcode = 0
20
- # hsrp_pkt.hsrp_state = 16
21
- # hsrp_pkt.hsrp_priority = 254
22
- # hsrp_pkt.hsrp_group = 1
23
- # hsrp_pkt.hsrp_vip = 10.100.100.254
24
- # hsrp_pkt.recalc
25
- # hsrp_pkt.to_f('/tmp/hsrp.pcap')
26
- #
27
- # == Parameters
28
- #
29
- # :eth
30
- # A pre-generated EthHeader object.
31
- # :ip
32
- # A pre-generated IPHeader object.
33
- # :udp
34
- # A pre-generated UDPHeader object.
35
- # :flavor
36
- # TODO: HSRP packets don't tend have any flavor.
37
- # :config
38
- # A hash of return address details, often the output of Utils.whoami?
39
- class HSRPPacket < Packet
15
+ # HSRPPacket is used to construct HSRP Packets. They contain an EthHeader, an IPHeader, and a UDPHeader.
16
+ #
17
+ # == Example
18
+ #
19
+ # hsrp_pkt.new
20
+ # hsrp_pkt.hsrp_opcode = 0
21
+ # hsrp_pkt.hsrp_state = 16
22
+ # hsrp_pkt.hsrp_priority = 254
23
+ # hsrp_pkt.hsrp_group = 1
24
+ # hsrp_pkt.hsrp_vip = 10.100.100.254
25
+ # hsrp_pkt.recalc
26
+ # hsrp_pkt.to_f('/tmp/hsrp.pcap')
27
+ #
28
+ # == Parameters
29
+ #
30
+ # :eth
31
+ # A pre-generated EthHeader object.
32
+ # :ip
33
+ # A pre-generated IPHeader object.
34
+ # :udp
35
+ # A pre-generated UDPHeader object.
36
+ # :flavor
37
+ # TODO: HSRP packets don't tend have any flavor.
38
+ # :config
39
+ # A hash of return address details, often the output of Utils.whoami?
40
+ class HSRPPacket < Packet
40
41
  include ::PacketFu::EthHeaderMixin
41
42
  include ::PacketFu::IPHeaderMixin
42
43
  include ::PacketFu::UDPHeaderMixin
43
44
  include ::PacketFu::HSRPHeaderMixin
44
45
 
45
- attr_accessor :eth_header, :ip_header, :udp_header, :hsrp_header
46
+ attr_accessor :eth_header, :ip_header, :udp_header, :hsrp_header
46
47
 
47
- def self.can_parse?(str)
48
- return false unless str.size >= 54
49
- return false unless EthPacket.can_parse? str
50
- return false unless IPPacket.can_parse? str
51
- return false unless UDPPacket.can_parse? str
52
- temp_packet = UDPPacket.new
53
- temp_packet.read(str)
54
- if temp_packet.ip_ttl == 1 and [temp_packet.udp_sport,temp_packet.udp_dport] == [1985,1985]
55
- return true
56
- else
57
- return false
58
- end
59
- end
48
+ def self.can_parse?(str)
49
+ return false unless str.size >= 54
50
+ return false unless EthPacket.can_parse? str
51
+ return false unless IPPacket.can_parse? str
52
+ return false unless UDPPacket.can_parse? str
53
+ temp_packet = UDPPacket.new
54
+ temp_packet.read(str)
55
+ if temp_packet.ip_ttl == 1 and [temp_packet.udp_sport,temp_packet.udp_dport] == [1985,1985]
56
+ return true
57
+ else
58
+ return false
59
+ end
60
+ end
60
61
 
61
- def read(str=nil, args={})
62
- raise "Cannot parse `#{str}'" unless self.class.can_parse?(str)
63
- @eth_header.read(str)
64
- super(args)
65
- self
66
- end
62
+ def read(str=nil, args={})
63
+ raise "Cannot parse `#{str}'" unless self.class.can_parse?(str)
64
+ @eth_header.read(str)
65
+ super(args)
66
+ self
67
+ end
67
68
 
68
- def initialize(args={})
69
- @eth_header = EthHeader.new(args).read(args[:eth])
70
- @ip_header = IPHeader.new(args).read(args[:ip])
71
- @ip_header.ip_proto = 0x11
72
- @udp_header = UDPHeader.new(args).read(args[:udp])
73
- @hsrp_header = HSRPHeader.new(args).read(args[:hsrp])
74
- @udp_header.body = @hsrp_header
75
- @ip_header.body = @udp_header
76
- @eth_header.body = @ip_header
77
- @headers = [@eth_header, @ip_header, @udp_header, @hsrp_header]
78
- super
79
- end
69
+ def initialize(args={})
70
+ @eth_header = EthHeader.new(args).read(args[:eth])
71
+ @ip_header = IPHeader.new(args).read(args[:ip])
72
+ @ip_header.ip_proto = 0x11
73
+ @udp_header = UDPHeader.new(args).read(args[:udp])
74
+ @hsrp_header = HSRPHeader.new(args).read(args[:hsrp])
75
+ @udp_header.body = @hsrp_header
76
+ @ip_header.body = @udp_header
77
+ @eth_header.body = @ip_header
78
+ @headers = [@eth_header, @ip_header, @udp_header, @hsrp_header]
79
+ super
80
+ end
80
81
 
81
- # Peek provides summary data on packet contents.
82
- def peek_format
83
- peek_data = ["UH "]
84
- peek_data << "%-5d" % self.to_s.size
85
- peek_data << "%-16s" % self.hsrp_addr
86
- peek_data << "%-4d" % self.hsrp_group
87
- peek_data << "%-35s" % self.hsrp_password_readable
88
- peek_data << "%-15s" % self.ip_saddr
89
- peek_data.join
90
- end
82
+ # Peek provides summary data on packet contents.
83
+ def peek_format
84
+ peek_data = ["UH "]
85
+ peek_data << "%-5d" % self.to_s.size
86
+ peek_data << "%-16s" % self.hsrp_addr
87
+ peek_data << "%-4d" % self.hsrp_group
88
+ peek_data << "%-35s" % self.hsrp_password_readable
89
+ peek_data << "%-15s" % self.ip_saddr
90
+ peek_data.join
91
+ end
91
92
 
92
- end
93
+ end
93
94
 
94
95
  end
95
96
 
@@ -1,120 +1,121 @@
1
+ # -*- coding: binary -*-
1
2
  module PacketFu
2
- # HSRPHeader is a complete HSRP struct, used in HSRPPacket. HSRP is typically used for
3
- # fault-tolerant default gateway in IP routing environment.
4
- #
5
- # For more on HSRP packets, see http://www.networksorcery.com/enp/protocol/hsrp.htm
6
- #
7
- # Submitted by fropert@packetfault.org. Thanks, Francois!
8
- #
9
- # ==== Header Definition
10
- #
11
- # Int8 :hsrp_version Default: 0 # Version
12
- # Int8 :hsrp_opcode # Opcode
13
- # Int8 :hsrp_state # State
14
- # Int8 :hsrp_hellotime Default: 3 # Hello Time
15
- # Int8 :hsrp_holdtime Default: 10 # Hold Time
16
- # Int8 :hsrp_priority # Priority
17
- # Int8 :hsrp_group # Group
18
- # Int8 :hsrp_reserved Default: 0 # Reserved
19
- # String :hsrp_password # Authentication Data
20
- # Octets :hsrp_vip # Virtual IP Address
21
- # String :body
22
- class HSRPHeader < Struct.new(:hsrp_version, :hsrp_opcode, :hsrp_state,
23
- :hsrp_hellotime, :hsrp_holdtime,
24
- :hsrp_priority, :hsrp_group,
25
- :hsrp_reserved, :hsrp_password,
26
- :hsrp_vip, :body)
3
+ # HSRPHeader is a complete HSRP struct, used in HSRPPacket. HSRP is typically used for
4
+ # fault-tolerant default gateway in IP routing environment.
5
+ #
6
+ # For more on HSRP packets, see http://www.networksorcery.com/enp/protocol/hsrp.htm
7
+ #
8
+ # Submitted by fropert@packetfault.org. Thanks, Francois!
9
+ #
10
+ # ==== Header Definition
11
+ #
12
+ # Int8 :hsrp_version Default: 0 # Version
13
+ # Int8 :hsrp_opcode # Opcode
14
+ # Int8 :hsrp_state # State
15
+ # Int8 :hsrp_hellotime Default: 3 # Hello Time
16
+ # Int8 :hsrp_holdtime Default: 10 # Hold Time
17
+ # Int8 :hsrp_priority # Priority
18
+ # Int8 :hsrp_group # Group
19
+ # Int8 :hsrp_reserved Default: 0 # Reserved
20
+ # String :hsrp_password # Authentication Data
21
+ # Octets :hsrp_vip # Virtual IP Address
22
+ # String :body
23
+ class HSRPHeader < Struct.new(:hsrp_version, :hsrp_opcode, :hsrp_state,
24
+ :hsrp_hellotime, :hsrp_holdtime,
25
+ :hsrp_priority, :hsrp_group,
26
+ :hsrp_reserved, :hsrp_password,
27
+ :hsrp_vip, :body)
27
28
 
28
- include StructFu
29
+ include StructFu
29
30
 
30
- def initialize(args={})
31
- super(
32
- Int8.new(args[:hsrp_version] || 0),
33
- Int8.new(args[:hsrp_opcode]),
34
- Int8.new(args[:hsrp_state]),
35
- Int8.new(args[:hsrp_hellotime] || 3),
36
- Int8.new(args[:hsrp_holdtime] || 10),
37
- Int8.new(args[:hsrp_priority]),
38
- Int8.new(args[:hsrp_group]),
39
- Int8.new(args[:hsrp_reserved] || 0),
40
- StructFu::String.new.read(args[:hsrp_password] || "cisco\x00\x00\x00"),
41
- Octets.new.read(args[:hsrp_vip] || ("\x00" * 4)),
42
- StructFu::String.new.read(args[:body])
43
- )
44
- end
31
+ def initialize(args={})
32
+ super(
33
+ Int8.new(args[:hsrp_version] || 0),
34
+ Int8.new(args[:hsrp_opcode]),
35
+ Int8.new(args[:hsrp_state]),
36
+ Int8.new(args[:hsrp_hellotime] || 3),
37
+ Int8.new(args[:hsrp_holdtime] || 10),
38
+ Int8.new(args[:hsrp_priority]),
39
+ Int8.new(args[:hsrp_group]),
40
+ Int8.new(args[:hsrp_reserved] || 0),
41
+ StructFu::String.new.read(args[:hsrp_password] || "cisco\x00\x00\x00"),
42
+ Octets.new.read(args[:hsrp_vip] || ("\x00" * 4)),
43
+ StructFu::String.new.read(args[:body])
44
+ )
45
+ end
45
46
 
46
- # Returns the object in string form.
47
- def to_s
48
- self.to_a.map {|x| x.to_s}.join
49
- end
47
+ # Returns the object in string form.
48
+ def to_s
49
+ self.to_a.map {|x| x.to_s}.join
50
+ end
50
51
 
51
- # Reads a string to populate the object.
52
- def read(str)
53
- force_binary(str)
54
- return self if str.nil?
55
- self[:hsrp_version].read(str[0,1])
56
- self[:hsrp_opcode].read(str[1,1])
57
- self[:hsrp_state].read(str[2,1])
58
- self[:hsrp_hellotime].read(str[3,1])
59
- self[:hsrp_holdtime].read(str[4,1])
60
- self[:hsrp_priority].read(str[5,1])
61
- self[:hsrp_group].read(str[6,1])
62
- self[:hsrp_reserved].read(str[7,1])
63
- self[:hsrp_password].read(str[8,8])
64
- self[:hsrp_vip].read(str[16,4])
65
- self[:body].read(str[20,str.size]) if str.size > 20
66
- self
67
- end
52
+ # Reads a string to populate the object.
53
+ def read(str)
54
+ force_binary(str)
55
+ return self if str.nil?
56
+ self[:hsrp_version].read(str[0,1])
57
+ self[:hsrp_opcode].read(str[1,1])
58
+ self[:hsrp_state].read(str[2,1])
59
+ self[:hsrp_hellotime].read(str[3,1])
60
+ self[:hsrp_holdtime].read(str[4,1])
61
+ self[:hsrp_priority].read(str[5,1])
62
+ self[:hsrp_group].read(str[6,1])
63
+ self[:hsrp_reserved].read(str[7,1])
64
+ self[:hsrp_password].read(str[8,8])
65
+ self[:hsrp_vip].read(str[16,4])
66
+ self[:body].read(str[20,str.size]) if str.size > 20
67
+ self
68
+ end
68
69
 
69
- # Setter for the type.
70
- def hsrp_version=(i); typecast i; end
71
- # Getter for the type.
72
- def hsrp_version; self[:hsrp_version].to_i; end
73
- # Setter for the type.
74
- def hsrp_opcode=(i); typecast i; end
75
- # Getter for the type.
76
- def hsrp_opcode; self[:hsrp_opcode].to_i; end
77
- # Setter for the type.
78
- def hsrp_state=(i); typecast i; end
79
- # Getter for the type.
80
- def hsrp_state; self[:hsrp_state].to_i; end
81
- # Setter for the type.
82
- def hsrp_hellotime=(i); typecast i; end
83
- # Getter for the type.
84
- def hsrp_hellotime; self[:hsrp_hellotime].to_i; end
85
- # Setter for the type.
86
- def hsrp_holdtime=(i); typecast i; end
87
- # Getter for the type.
88
- def hsrp_holdtime; self[:hsrp_holdtime].to_i; end
89
- # Setter for the type.
90
- def hsrp_priority=(i); typecast i; end
91
- # Getter for the type.
92
- def hsrp_priority; self[:hsrp_priority].to_i; end
93
- # Setter for the type.
94
- def hsrp_group=(i); typecast i; end
95
- # Getter for the type.
96
- def hsrp_group; self[:hsrp_group].to_i; end
97
- # Setter for the type.
98
- def hsrp_reserved=(i); typecast i; end
99
- # Getter for the type.
100
- def hsrp_reserved; self[:hsrp_reserved].to_i; end
70
+ # Setter for the type.
71
+ def hsrp_version=(i); typecast i; end
72
+ # Getter for the type.
73
+ def hsrp_version; self[:hsrp_version].to_i; end
74
+ # Setter for the type.
75
+ def hsrp_opcode=(i); typecast i; end
76
+ # Getter for the type.
77
+ def hsrp_opcode; self[:hsrp_opcode].to_i; end
78
+ # Setter for the type.
79
+ def hsrp_state=(i); typecast i; end
80
+ # Getter for the type.
81
+ def hsrp_state; self[:hsrp_state].to_i; end
82
+ # Setter for the type.
83
+ def hsrp_hellotime=(i); typecast i; end
84
+ # Getter for the type.
85
+ def hsrp_hellotime; self[:hsrp_hellotime].to_i; end
86
+ # Setter for the type.
87
+ def hsrp_holdtime=(i); typecast i; end
88
+ # Getter for the type.
89
+ def hsrp_holdtime; self[:hsrp_holdtime].to_i; end
90
+ # Setter for the type.
91
+ def hsrp_priority=(i); typecast i; end
92
+ # Getter for the type.
93
+ def hsrp_priority; self[:hsrp_priority].to_i; end
94
+ # Setter for the type.
95
+ def hsrp_group=(i); typecast i; end
96
+ # Getter for the type.
97
+ def hsrp_group; self[:hsrp_group].to_i; end
98
+ # Setter for the type.
99
+ def hsrp_reserved=(i); typecast i; end
100
+ # Getter for the type.
101
+ def hsrp_reserved; self[:hsrp_reserved].to_i; end
101
102
 
102
- def hsrp_addr=(addr)
103
- self[:hsrp_vip].read_quad(addr)
104
- end
103
+ def hsrp_addr=(addr)
104
+ self[:hsrp_vip].read_quad(addr)
105
+ end
105
106
 
106
- # Returns a more readable IP source address.
107
- def hsrp_addr
108
- self[:hsrp_vip].to_x
109
- end
107
+ # Returns a more readable IP source address.
108
+ def hsrp_addr
109
+ self[:hsrp_vip].to_x
110
+ end
110
111
 
111
- # Readability aliases
112
+ # Readability aliases
112
113
 
113
- alias :hsrp_vip_readable :hsrp_addr
114
+ alias :hsrp_vip_readable :hsrp_addr
114
115
 
115
- def hsrp_password_readable
116
- hsrp_password.to_s.inspect
117
- end
116
+ def hsrp_password_readable
117
+ hsrp_password.to_s.inspect
118
+ end
118
119
 
119
- end
120
+ end
120
121
  end
@@ -1,31 +1,32 @@
1
+ # -*- coding: binary -*-
1
2
  module PacketFu
2
- # This Mixin simplifies access to the HSRPHeaders. Mix this in with your
3
- # packet interface, and it will add methods that essentially delegate to
4
- # the 'hsrp_header' method (assuming that it is a HSRPHeader object)
5
- module HSRPHeaderMixin
6
- def hsrp_version=(v); self.hsrp_header.hsrp_version= v; end
7
- def hsrp_version; self.hsrp_header.hsrp_version; end
8
- def hsrp_opcode=(v); self.hsrp_header.hsrp_opcode= v; end
9
- def hsrp_opcode; self.hsrp_header.hsrp_opcode; end
10
- def hsrp_state=(v); self.hsrp_header.hsrp_state= v; end
11
- def hsrp_state; self.hsrp_header.hsrp_state; end
12
- def hsrp_hellotime=(v); self.hsrp_header.hsrp_hellotime= v; end
13
- def hsrp_hellotime; self.hsrp_header.hsrp_hellotime; end
14
- def hsrp_holdtime=(v); self.hsrp_header.hsrp_holdtime= v; end
15
- def hsrp_holdtime; self.hsrp_header.hsrp_holdtime; end
16
- def hsrp_priority=(v); self.hsrp_header.hsrp_priority= v; end
17
- def hsrp_priority; self.hsrp_header.hsrp_priority; end
18
- def hsrp_group=(v); self.hsrp_header.hsrp_group= v; end
19
- def hsrp_group; self.hsrp_header.hsrp_group; end
20
- def hsrp_reserved=(v); self.hsrp_header.hsrp_reserved= v; end
21
- def hsrp_reserved; self.hsrp_header.hsrp_reserved; end
22
- def hsrp_addr=(v); self.hsrp_header.hsrp_addr= v; end
23
- def hsrp_addr; self.hsrp_header.hsrp_addr; end
24
- def hsrp_vip_readable; self.hsrp_header.hsrp_vip_readable; end
25
- def hsrp_password_readable; self.hsrp_header.hsrp_password_readable; end
26
- def hsrp_password; self.hsrp_header.hsrp_password; end
27
- def hsrp_password=(v); self.hsrp_header.hsrp_password= v; end
28
- def hsrp_vip; self.hsrp_header.hsrp_vip; end
29
- def hsrp_vip=(v); self.hsrp_header.hsrp_vip= v; end
30
- end
3
+ # This Mixin simplifies access to the HSRPHeaders. Mix this in with your
4
+ # packet interface, and it will add methods that essentially delegate to
5
+ # the 'hsrp_header' method (assuming that it is a HSRPHeader object)
6
+ module HSRPHeaderMixin
7
+ def hsrp_version=(v); self.hsrp_header.hsrp_version= v; end
8
+ def hsrp_version; self.hsrp_header.hsrp_version; end
9
+ def hsrp_opcode=(v); self.hsrp_header.hsrp_opcode= v; end
10
+ def hsrp_opcode; self.hsrp_header.hsrp_opcode; end
11
+ def hsrp_state=(v); self.hsrp_header.hsrp_state= v; end
12
+ def hsrp_state; self.hsrp_header.hsrp_state; end
13
+ def hsrp_hellotime=(v); self.hsrp_header.hsrp_hellotime= v; end
14
+ def hsrp_hellotime; self.hsrp_header.hsrp_hellotime; end
15
+ def hsrp_holdtime=(v); self.hsrp_header.hsrp_holdtime= v; end
16
+ def hsrp_holdtime; self.hsrp_header.hsrp_holdtime; end
17
+ def hsrp_priority=(v); self.hsrp_header.hsrp_priority= v; end
18
+ def hsrp_priority; self.hsrp_header.hsrp_priority; end
19
+ def hsrp_group=(v); self.hsrp_header.hsrp_group= v; end
20
+ def hsrp_group; self.hsrp_header.hsrp_group; end
21
+ def hsrp_reserved=(v); self.hsrp_header.hsrp_reserved= v; end
22
+ def hsrp_reserved; self.hsrp_header.hsrp_reserved; end
23
+ def hsrp_addr=(v); self.hsrp_header.hsrp_addr= v; end
24
+ def hsrp_addr; self.hsrp_header.hsrp_addr; end
25
+ def hsrp_vip_readable; self.hsrp_header.hsrp_vip_readable; end
26
+ def hsrp_password_readable; self.hsrp_header.hsrp_password_readable; end
27
+ def hsrp_password; self.hsrp_header.hsrp_password; end
28
+ def hsrp_password=(v); self.hsrp_header.hsrp_password= v; end
29
+ def hsrp_vip; self.hsrp_header.hsrp_vip; end
30
+ def hsrp_vip=(v); self.hsrp_header.hsrp_vip= v; end
31
+ end
31
32
  end