Code Duplication    Length = 39-39 lines in 2 locations

v0x04/match_fields.py 2 locations

@@ 187-225 (lines=39) @@
184
        return cls(value)
185
186
187
class MatchDLDst(MatchField):
188
    """Match for datalink destination."""
189
190
    name = 'dl_dst'
191
    oxm_field = OxmOfbMatchField.OFPXMT_OFB_ETH_DST
192
193
    def as_of_tlv(self):
194
        """Return a pyof OXM TLV instance."""
195
        if '/' in self.value:
196
            value, mask = self.value.split('/')
197
            if mask.upper() == 'FF:FF:FF:FF:FF:FF':
198
                mask = None
199
                oxm_hasmask = False
200
            else:
201
                mask = mask.upper()
202
                oxm_hasmask = True
203
        else:
204
            value = self.value
205
            mask = None
206
            oxm_hasmask = False
207
        value_bytes = HWAddress(value).pack()
208
        if mask:
209
            value_bytes += HWAddress(mask).pack()
210
        return OxmTLV(oxm_field=self.oxm_field,
211
                      oxm_hasmask=oxm_hasmask,
212
                      oxm_value=value_bytes)
213
214
    @classmethod
215
    def from_of_tlv(cls, tlv):
216
        """Return an instance from a pyof OXM TLV."""
217
        hw_address = HWAddress()
218
        hw_address.unpack(tlv.oxm_value)
219
        addr_str = str(hw_address)
220
        value = addr_str
221
        if tlv.oxm_hasmask:
222
            hw_mask = HWAddress()
223
            hw_mask.unpack(tlv.oxm_value[6:])
224
            mask_str = str(hw_mask)
225
            value = f'{addr_str}/{mask_str}'
226
        return cls(value)
227
228
@@ 145-183 (lines=39) @@
142
        return cls(priority)
143
144
145
class MatchDLSrc(MatchField):
146
    """Match for datalink source."""
147
148
    name = 'dl_src'
149
    oxm_field = OxmOfbMatchField.OFPXMT_OFB_ETH_SRC
150
151
    def as_of_tlv(self):
152
        """Return a pyof OXM TLV instance."""
153
        if '/' in self.value:
154
            value, mask = self.value.split('/')
155
            if mask.upper() == 'FF:FF:FF:FF:FF:FF':
156
                mask = None
157
                oxm_hasmask = False
158
            else:
159
                mask = mask.upper()
160
                oxm_hasmask = True
161
        else:
162
            value = self.value
163
            mask = None
164
            oxm_hasmask = False
165
        value_bytes = HWAddress(value).pack()
166
        if mask:
167
            value_bytes += HWAddress(mask).pack()
168
        return OxmTLV(oxm_field=self.oxm_field,
169
                      oxm_hasmask=oxm_hasmask,
170
                      oxm_value=value_bytes)
171
172
    @classmethod
173
    def from_of_tlv(cls, tlv):
174
        """Return an instance from a pyof OXM TLV."""
175
        hw_address = HWAddress()
176
        hw_address.unpack(tlv.oxm_value)
177
        addr_str = str(hw_address)
178
        value = addr_str
179
        if tlv.oxm_hasmask:
180
            hw_mask = HWAddress()
181
            hw_mask.unpack(tlv.oxm_value[6:])
182
            mask_str = str(hw_mask)
183
            value = f'{addr_str}/{mask_str}'
184
        return cls(value)
185
186