photoncloud-monorepo/nix-nos/modules/bgp/default.nix
centra 3eeb303dcb feat: Batch commit for T039.S3 deployment
Includes all pending changes needed for nixos-anywhere:
- fiberlb: L7 policy, rule, certificate types
- deployer: New service for cluster management
- nix-nos: Generic network modules
- Various service updates and fixes

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
2025-12-13 04:34:51 +09:00

103 lines
2.2 KiB
Nix

{ config, lib, pkgs, ... }:
with lib;
let
cfg = config.nix-nos.bgp;
# BGP peer type
peerType = types.submodule {
options = {
address = mkOption {
type = types.str;
description = "Peer IP address";
example = "192.168.1.1";
};
asn = mkOption {
type = types.int;
description = "Peer AS number";
example = 65001;
};
description = mkOption {
type = types.str;
default = "";
description = "Human-readable peer description";
};
};
};
# BGP announcement type
announcementType = types.submodule {
options = {
prefix = mkOption {
type = types.str;
description = "IP prefix to announce in CIDR notation";
example = "10.0.0.0/24";
};
nexthop = mkOption {
type = types.nullOr types.str;
default = null;
description = "Override next-hop IP address";
};
};
};
in {
imports = [
./bird.nix
./gobgp.nix
];
options.nix-nos.bgp = {
enable = mkEnableOption "BGP routing";
backend = mkOption {
type = types.enum [ "bird" "gobgp" ];
default = "bird";
description = "BGP daemon backend to use";
};
asn = mkOption {
type = types.int;
description = "Local AS number";
example = 64512;
};
routerId = mkOption {
type = types.str;
description = "BGP router ID (typically an IP address)";
example = "10.0.0.1";
};
peers = mkOption {
type = types.listOf peerType;
default = [];
description = "BGP peer configurations";
};
announcements = mkOption {
type = types.listOf announcementType;
default = [];
description = "Prefixes to announce to BGP peers";
};
};
config = mkIf (config.nix-nos.enable && cfg.enable) {
# Assertions
assertions = [
{
assertion = cfg.asn > 0 && cfg.asn < 4294967296;
message = "BGP ASN must be between 1 and 4294967295";
}
{
assertion = cfg.routerId != "";
message = "BGP router ID must be configured";
}
];
# Backend-specific configuration is handled by bird.nix and gobgp.nix
};
}