Skip to content

Commit d8ff3ea

Browse files
committed
Closes #19134: Interfaces TX power allows negative value
1 parent 248c94b commit d8ff3ea

File tree

6 files changed

+34
-7
lines changed

6 files changed

+34
-7
lines changed

Diff for: netbox/dcim/forms/filtersets.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1435,7 +1435,7 @@ class InterfaceFilterForm(PathEndpointFilterForm, DeviceComponentFilterForm):
14351435
tx_power = forms.IntegerField(
14361436
required=False,
14371437
label=_('Transmit power (dBm)'),
1438-
min_value=0,
1438+
min_value=-127,
14391439
max_value=127
14401440
)
14411441
vrf_id = DynamicModelMultipleChoiceField(
+21
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,21 @@
1+
# Generated by Django 5.1.8 on 2025-04-17 03:36
2+
3+
import django.core.validators
4+
from django.db import migrations, models
5+
6+
7+
class Migration(migrations.Migration):
8+
9+
dependencies = [
10+
('dcim', '0200_populate_mac_addresses'),
11+
]
12+
13+
operations = [
14+
migrations.AlterField(
15+
model_name='interface',
16+
name='tx_power',
17+
field=models.SmallIntegerField(blank=True, null=True, validators=[
18+
django.core.validators.MinValueValidator(-127), django.core.validators.MaxValueValidator(127)
19+
]),
20+
),
21+
]

Diff for: netbox/dcim/models/device_components.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -710,10 +710,13 @@ class Interface(ModularComponentModel, BaseInterface, CabledObjectModel, PathEnd
710710
verbose_name=('channel width (MHz)'),
711711
help_text=_("Populated by selected channel (if set)")
712712
)
713-
tx_power = models.PositiveSmallIntegerField(
713+
tx_power = models.SmallIntegerField(
714714
blank=True,
715715
null=True,
716-
validators=(MaxValueValidator(127),),
716+
validators=[
717+
MinValueValidator(-127),
718+
MaxValueValidator(127)
719+
],
717720
verbose_name=_('transmit power (dBm)')
718721
)
719722
poe_mode = models.CharField(

Diff for: netbox/dcim/tests/test_api.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -1743,7 +1743,7 @@ def setUpTestData(cls):
17431743
'name': 'Interface 8',
17441744
'type': InterfaceTypeChoices.TYPE_80211A,
17451745
'mode': InterfaceModeChoices.MODE_Q_IN_Q,
1746-
'tx_power': 10,
1746+
'tx_power': -10,
17471747
'wireless_lans': [wireless_lans[0].pk, wireless_lans[1].pk],
17481748
'rf_channel': "",
17491749
'qinq_svlan': vlans[3].pk,

Diff for: netbox/dcim/tests/test_filtersets.py

+5-2
Original file line numberDiff line numberDiff line change
@@ -4072,7 +4072,7 @@ def setUpTestData(cls):
40724072
type=InterfaceTypeChoices.TYPE_OTHER,
40734073
enabled=False,
40744074
mgmt_only=False,
4075-
tx_power=40,
4075+
tx_power=-40,
40764076
mode=InterfaceModeChoices.MODE_Q_IN_Q,
40774077
qinq_svlan=vlans[2]
40784078
),
@@ -4340,7 +4340,10 @@ def test_rf_channel_width(self):
43404340

43414341
def test_tx_power(self):
43424342
params = {'tx_power': [40]}
4343-
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
4343+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
4344+
4345+
params = {'tx_power': [-40]}
4346+
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
43444347

43454348
def test_vrf(self):
43464349
vrfs = VRF.objects.all()[:2]

Diff for: netbox/dcim/tests/test_views.py

+1-1
Original file line numberDiff line numberDiff line change
@@ -2660,7 +2660,7 @@ def setUpTestData(cls):
26602660
'poe_mode': InterfacePoEModeChoices.MODE_PD,
26612661
'poe_type': InterfacePoETypeChoices.TYPE_2_8023AT,
26622662
'mode': InterfaceModeChoices.MODE_TAGGED,
2663-
'tx_power': 10,
2663+
'tx_power': -10,
26642664
'untagged_vlan': vlans[0].pk,
26652665
'tagged_vlans': [v.pk for v in vlans[1:4]],
26662666
'vrf': vrfs[1].pk,

0 commit comments

Comments
 (0)