feat: add broadcast field to interfaces

This commit is contained in:
2026-03-01 11:13:13 +01:00
parent 58ef0dec63
commit 8b787a99c2
5 changed files with 29 additions and 2 deletions

View File

@@ -0,0 +1,21 @@
"""add broadcast column to interfaces
Revision ID: 0006
Revises: 0005
Create Date: 2026-03-01
"""
from alembic import op
import sqlalchemy as sa
revision = "0006"
down_revision = "0005"
branch_labels = None
depends_on = None
def upgrade() -> None:
op.add_column("interfaces", sa.Column("broadcast", sa.String(64), server_default="''", nullable=False))
def downgrade() -> None:
op.drop_column("interfaces", "broadcast")

View File

@@ -60,6 +60,7 @@ class Interface(Base):
config_id: Mapped[int] = mapped_column(Integer, ForeignKey("configs.id"), nullable=False)
name: Mapped[str] = mapped_column(String(32), nullable=False)
zone_id: Mapped[int | None] = mapped_column(Integer, ForeignKey("zones.id"), nullable=True)
broadcast: Mapped[str] = mapped_column(String(64), default="")
options: Mapped[str] = mapped_column(Text, default="")
config: Mapped["Config"] = relationship("Config", back_populates="interfaces")

View File

@@ -65,12 +65,14 @@ class ZoneOut(BaseModel):
class InterfaceCreate(BaseModel):
name: str
zone_id: Optional[int] = None
broadcast: str = ""
options: str = ""
class InterfaceUpdate(BaseModel):
name: Optional[str] = None
zone_id: Optional[int] = None
broadcast: Optional[str] = None
options: Optional[str] = None
@@ -79,6 +81,7 @@ class InterfaceOut(BaseModel):
config_id: int
name: str
zone_id: Optional[int]
broadcast: str
options: str
model_config = {"from_attributes": True}

View File

@@ -26,10 +26,10 @@ class ShorewallGenerator:
return "".join(lines)
def interfaces(self) -> str:
lines = [self._header("interfaces"), "#ZONE".ljust(16) + "INTERFACE".ljust(16) + "OPTIONS\n"]
lines = [self._header("interfaces"), "#ZONE".ljust(16) + "INTERFACE".ljust(16) + "BROADCAST".ljust(16) + "OPTIONS\n"]
for iface in self._config.interfaces:
zone = iface.zone.name if iface.zone else "-"
lines.append(self._col(zone, iface.name, iface.options or "-"))
lines.append(self._col(zone, iface.name, iface.broadcast or "-", iface.options or "-"))
return "".join(lines)
def policy(self) -> str: