Code Duplication    Length = 39-39 lines in 2 locations

v0x04/match_fields.py 2 locations

@@ 164-202 (lines=39) @@
161
        return cls(value)
162
163
164
class MatchDLDst(MatchField):
165
    """Match for datalink destination."""
166
167
    name = 'dl_dst'
168
    oxm_field = OxmOfbMatchField.OFPXMT_OFB_ETH_DST
169
170
    def as_of_tlv(self):
171
        """Return a pyof OXM TLV instance."""
172
        if '/' in self.value:
173
            value, mask = self.value.split('/')
174
            if mask.upper() == 'FF:FF:FF:FF:FF:FF':
175
                mask = None
176
                oxm_hasmask = False
177
            else:
178
                mask = mask.upper()
179
                oxm_hasmask = True
180
        else:
181
            value = self.value
182
            mask = None
183
            oxm_hasmask = False
184
        value_bytes = HWAddress(value).pack()
185
        if mask:
186
            value_bytes += HWAddress(mask).pack()
187
        return OxmTLV(oxm_field=self.oxm_field,
188
                      oxm_hasmask=oxm_hasmask,
189
                      oxm_value=value_bytes)
190
191
    @classmethod
192
    def from_of_tlv(cls, tlv):
193
        """Return an instance from a pyof OXM TLV."""
194
        hw_address = HWAddress()
195
        hw_address.unpack(tlv.oxm_value)
196
        addr_str = str(hw_address)
197
        value = addr_str
198
        if tlv.oxm_hasmask:
199
            hw_mask = HWAddress()
200
            hw_mask.unpack(tlv.oxm_value[6:])
201
            mask_str = str(hw_mask)
202
            value = f'{addr_str}/{mask_str}'
203
        return cls(value)
204
205
@@ 122-160 (lines=39) @@
119
        return cls(priority)
120
121
122
class MatchDLSrc(MatchField):
123
    """Match for datalink source."""
124
125
    name = 'dl_src'
126
    oxm_field = OxmOfbMatchField.OFPXMT_OFB_ETH_SRC
127
128
    def as_of_tlv(self):
129
        """Return a pyof OXM TLV instance."""
130
        if '/' in self.value:
131
            value, mask = self.value.split('/')
132
            if mask.upper() == 'FF:FF:FF:FF:FF:FF':
133
                mask = None
134
                oxm_hasmask = False
135
            else:
136
                mask = mask.upper()
137
                oxm_hasmask = True
138
        else:
139
            value = self.value
140
            mask = None
141
            oxm_hasmask = False
142
        value_bytes = HWAddress(value).pack()
143
        if mask:
144
            value_bytes += HWAddress(mask).pack()
145
        return OxmTLV(oxm_field=self.oxm_field,
146
                      oxm_hasmask=oxm_hasmask,
147
                      oxm_value=value_bytes)
148
149
    @classmethod
150
    def from_of_tlv(cls, tlv):
151
        """Return an instance from a pyof OXM TLV."""
152
        hw_address = HWAddress()
153
        hw_address.unpack(tlv.oxm_value)
154
        addr_str = str(hw_address)
155
        value = addr_str
156
        if tlv.oxm_hasmask:
157
            hw_mask = HWAddress()
158
            hw_mask.unpack(tlv.oxm_value[6:])
159
            mask_str = str(hw_mask)
160
            value = f'{addr_str}/{mask_str}'
161
        return cls(value)
162
163