/* * BIRD -- Wireguard Protocol Configuration * * (c) 1999 Martin Mares * * Can be freely distributed and used under the terms of the GNU GPL. */ CF_HDR #include "proto/wireguard/wireguard.h" CF_DEFINES #define WG_CFG ((struct wg_config *) this_proto) CF_DECLS CF_KEYWORDS(WIREGUARD, PRIVATE_KEY, LISTEN_PORT, PUBLIC_KEY, ENDPOINT, ALLOWED_IP) CF_GRAMMAR proto: wireguard_proto '}' ; wireguard_proto_start: proto_start WIREGUARD { this_proto = proto_config_new(&proto_wireguard, $1); } ; wireguard_proto: wireguard_proto_start proto_name '{' | wireguard_proto wg_proto_channel ';' | wireguard_proto proto_item ';' | wireguard_proto INTERFACE TEXT ';' { WG_CFG->ifname = $3; } | wireguard_proto PRIVATE_KEY private_key ';' | wireguard_proto LISTEN_PORT listen_port ';' | wireguard_proto wg_peer ';' ; wg_peer: wg_peer_start wg_peer_opt_list wg_peer_end; wg_peer_start: PEER wg_peer_end: ; wg_peer_item: PUBLIC_KEY public_key | ENDPOINT endpoint | PORT port | ALLOWED_IP allowedip ; wg_peer_opts: /* empty */ | wg_peer_opts wg_peer_item ';' ; wg_peer_opt_list: /* empty */ | '{' wg_peer_opts '}' ; private_key: text { WG_CFG->private_key = $1; } listen_port: expr { WG_CFG->listen_port = $1; } public_key: text { WG_CFG->peer.public_key = $1; } endpoint: ipa { WG_CFG->peer.endpoint = $1; } port: expr { WG_CFG->peer.remote_port = $1; } allowedip: net_or_ipa { WG_CFG->peer.allowedip = $1; } ; wg_proto_channel: wg_channel_start channel_opt_list wg_channel_end; wg_channel_start: net_type { this_channel = channel_config_get(&channel_wg, net_label[$1], $1, this_proto); } wg_channel_end: { this_channel = NULL; } CF_CODE CF_END