diff --git a/.gitmodules b/.gitmodules index b624f58166..308311a0d1 100644 --- a/.gitmodules +++ b/.gitmodules @@ -19,6 +19,9 @@ [submodule "vendor/grammars/AutoHotkey"] path = vendor/grammars/AutoHotkey url = https://github.com/ahkscript/SublimeAutoHotkey +[submodule "vendor/grammars/BIRD-tm-language-grammar"] + path = vendor/grammars/BIRD-tm-language-grammar + url = https://github.com/bird-chinese-community/BIRD-tm-language-grammar.git [submodule "vendor/grammars/CUE-Sheet_sublime"] path = vendor/grammars/CUE-Sheet_sublime url = https://github.com/relikd/CUE-Sheet_sublime diff --git a/grammars.yml b/grammars.yml index a55124190e..c01a2138fc 100644 --- a/grammars.yml +++ b/grammars.yml @@ -13,6 +13,8 @@ vendor/grammars/AtomLanguageVelocity: - source.velocity.html vendor/grammars/AutoHotkey: - source.ahk +vendor/grammars/BIRD-tm-language-grammar: +- source.bird2 vendor/grammars/CUE-Sheet_sublime: - source.cuesheet vendor/grammars/Clue-for-VSCode: diff --git a/lib/linguist/languages.yml b/lib/linguist/languages.yml index 7df856d938..f1adedfc4b 100644 --- a/lib/linguist/languages.yml +++ b/lib/linguist/languages.yml @@ -538,6 +538,17 @@ BASIC: ace_mode: basic color: "#ff0000" language_id: 28923963 +BIRD2: + type: data + color: "#b6d7e4" + filenames: + - bird.conf + aliases: + - bird + - bird3 + ace_mode: text + tm_scope: source.bird2 + language_id: 584191811 BQN: type: programming color: "#2b7067" diff --git a/samples/BIRD2/filenames/bird.conf b/samples/BIRD2/filenames/bird.conf new file mode 100644 index 0000000000..515879d50f --- /dev/null +++ b/samples/BIRD2/filenames/bird.conf @@ -0,0 +1,237 @@ +# Basic BIRD2 configuration file for BIRD 2 + +router id 192.168.1.1; +log syslog all; +debug protocols all; + +# Community list definition +define LOCAL_PREF_HIGH = [(65001,100), (65001,200)]; +define AS_PATH_FILTER = [= 65001 65002 * =]; +define MY_ASN = 65001; +define TEST_STR = "test"; +define PREFIX_LIST = [ + 10.0.0.0/8+, + 172.16.0.0/12+, + 192.168.0.0/16+, + 2001::/32{33,128} +]; + +# Define a protocol +protocol static static_routes { + ipv4 { + table master4; + export all; + import none; + } + + route 10.0.0.0/8 via 192.168.1.254; + route 172.16.0.0/12 blackhole; +} + +# BGP protocol with AS path filtering +protocol bgp peer1 { + local as 65001; + neighbor 192.168.1.2 as 65002; + + ipv4 { + export filter { + if bgp_path ~ [= * 65003 * =] then reject; + accept; + } + + import all; + } +} + +# OSPF protocol +protocol ospf v2 ospf1 { + ipv4 { + export all; + } + + area 0 { + interface "eth0" { + hello 10; + } + } +} + +protocol bgp Upstream { + local as 65001; + neighbor 203.0.113.1 as 174; + + ipv4 { + import filter { + if bgp_path ~ AS_PATH_FILTER then reject; + accept; + } + + export filter export_filter; + } +} + +protocol kernel Kernel { + ipv4; + scan time 10; +} + +# Filter and function definitions +function is_private_network() -> bool { + if net ~ [ 10.0.0.0/8+, 172.16.0.0/12+, 192.168.0.0/16+ ] then return true; + return false; +} + +filter export_filter { + if is_private_network() then reject; + if bgp_path.len > 10 then reject; + + if bgp_community ~ [(65001,100)] then { + bgp_local_pref = 200; + accept; + } + + accept; +} + +protocol bgp uplink { + local as 65001; + neighbor 203.0.113.1 as 174; + + ipv4 { + import filter { + if bgp_path ~ AS_PATH_FILTER then reject; + accept; + } + + export filter export_filter; + } +} + +# ================================================================ +# Basic BIRD2 configuration file for BIRD 2 & function definitions + +define BOGON_ASNS = [ + 0, # RFC 7607 + 23456, # RFC 4893 AS_TRANS + 64496..64511, # RFC 5398 and documentation/example ASNs + 64512..65534, # RFC 6996 Private ASNs + 65535, # RFC 7300 Last 16 bit ASN + 65536..65551, # RFC 5398 and documentation/example ASNs + 65552..131071, # RFC IANA reserved ASNs + 4200000000..4294967294, # Private ASNs + 4294967295 # RFC 7300 Last 32 bit ASN +]; +define TIER_1_ASNS = [ + 174, # Cogent + 701, # Verizon + 1299, # Telia + 2914, # NTT + 3257, # GTT + 3356, # Level3 (CenturyLink), Lumen + 3320, # DTAG + 3491, # PCCW Global + 5511, # Orange + 6453, # Tata + 6461, # Zayo + 6762, # Sparkle + 6830, # Liberty Global + 6939, # Hurricane Electric (IPv6 only) + 7018, # AT&T + 7922, # Comcast + 12956 # Telefonica +]; +define BOGON_PREFIXES_V4 = [ + 0.0.0.0/8+, # RFC 1122 'this' network + 10.0.0.0/8+, # RFC 1918 private space + 100.64.0.0/10+, # RFC 6598 Carrier grade nat space + 127.0.0.0/8+, # RFC 1122 localhost + 169.254.0.0/16+, # RFC 3927 link local + 172.16.0.0/12+, # RFC 1918 private space + 192.0.2.0/24, # RFC 5737 TEST-NET-1 + 192.88.99.0/24, # RFC 7526 deprecated 6to4 relay anycast. + 192.168.0.0/16+, # RFC 1918 private space + 198.18.0.0/15+, # RFC 2544 benchmarking + 198.51.100.0/24, # RFC 5737 TEST-NET-2 + 203.0.113.0/24, # RFC 5737 TEST-NET-3 + 224.0.0.0/4+, # multicast + 240.0.0.0/4+ # reserved +]; +define BOGON_PREFIXES_V6 = [ + ::/8+, # RFC 4291 IPv4-compatible, loopback, et al + 0064:ff9b::/96+, # RFC 6052 IPv4/IPv6 Translation + 0064:ff9b:1::/48+, # RFC 8215 Local-Use IPv4/IPv6 Translation + 0100::/64+, # RFC 6666 Discard-Only + 2001::/32{33,12}, + 2001:2::/48+, # RFC 5180 BMWG + 2001:10::/28+, # RFC 4843 ORCHID + 2001:db8::/32+, # RFC 3849 documentation + 2002::/16+, # RFC 7526 deprecated 6to4 relay anycast. + 3ffe::/16+, + 5f00::/8+, # RFC 3701 old 6bone + fc00::/7+, # RFC 4193 unique local unicast + fe80::/10+, # RFC 4291 link local unicast + fec0::/10+, # RFC 3879 old site local unicast + ff00::/8+ # RFC 4291 multicast +]; + +function is_bogon_prefix() -> bool { + case net.type { + NET_IP4: return net ~ BOGON_PREFIXES_V4; + NET_IP6: return net ~ BOGON_PREFIXES_V6; + else: print "is_bogon_prefix: unexpected net.type ", net.type, " ", net; + return false; + } +} + +function net_len_too_long() -> bool { + case net.type { + NET_IP4: return net.len > 24; + NET_IP6: return net.len > 48; + else: print "net_len_too_long: unexpected net.type ", net.type, " ", net; + return false; + } +} + +function is_bogon_asn() -> bool { + if bgp_path ~ BOGON_ASNS then return true; + return false; +} + +function is_no_tier1_asn() -> bool { + if bgp_path ~ TIER_1_ASNS then return false; + return true; +} + +function is_bogon() -> bool { + if net_len_too_long() then return true; + if is_bogon_prefix() then return true; + if source = RTS_BGP && is_bogon_asn() then return true; +} + +# ===================================================================== +# Advanced BGP configuration test file for BIRD 1 & IPv6 (`bird6.conf`) + +protocol bgp pub_Tier1_v6 from pub_ebgp_v6 { + source address 2001:db8::1; + neighbor 2001:db8::2 % 'ens19' as 65000; + cost 10; + import filter { + if !ebgp_import(65000, "upstream", 2, prefix_all_v6, [0]) then reject; + accept; + }; + export where ebgp_export(65000, "upstream", 2, prefix_all_v6, [0]); + import limit 99999999 action block; +}; + +protocol bgp pub_IXP_v6 from pub_ebgp_v6 { + source address 2001:db8::100; + neighbor 2001:db8::101 % 'ens19' as 65001; + cost 15; + import filter { + if bgp_path ~ [65000] then reject; + ebgp_import(65001, "upstream", 1, prefix_all_v6, [0]); + accept; + }; + export where ebgp_export(65001, "upstream", 1, prefix_all_v6, [0]); + import limit 99999999 action block; +}; \ No newline at end of file diff --git a/vendor/README.md b/vendor/README.md index f4a226d74e..ad23087e4b 100644 --- a/vendor/README.md +++ b/vendor/README.md @@ -51,6 +51,7 @@ This is a list of grammars that Linguist selects to provide syntax highlighting - **Awk:** [github-linguist/awk-sublime](https://github.com/github-linguist/awk-sublime) - **B4X:** [serkonda7/vscode-vba](https://github.com/serkonda7/vscode-vba) - **BASIC:** [telnet23/language-basic](https://github.com/telnet23/language-basic) +- **BIRD2:** [bird-chinese-community/BIRD-tm-language-grammar](https://github.com/bird-chinese-community/BIRD-tm-language-grammar) - **BQN:** [razetime/bqn-vscode](https://github.com/razetime/bqn-vscode) - **Ballerina:** [ballerina-platform/ballerina-grammar](https://github.com/ballerina-platform/ballerina-grammar) - **Batchfile:** [mmims/language-batchfile](https://github.com/mmims/language-batchfile) diff --git a/vendor/grammars/BIRD-tm-language-grammar b/vendor/grammars/BIRD-tm-language-grammar new file mode 160000 index 0000000000..da32221ba3 --- /dev/null +++ b/vendor/grammars/BIRD-tm-language-grammar @@ -0,0 +1 @@ +Subproject commit da32221ba3b21e4fb6bba98a88ff567b9594a472 diff --git a/vendor/licenses/git_submodule/BIRD-tm-language-grammar.dep.yml b/vendor/licenses/git_submodule/BIRD-tm-language-grammar.dep.yml new file mode 100644 index 0000000000..d5cca6bfd3 --- /dev/null +++ b/vendor/licenses/git_submodule/BIRD-tm-language-grammar.dep.yml @@ -0,0 +1,417 @@ +--- +name: BIRD-tm-language-grammar +version: da32221ba3b21e4fb6bba98a88ff567b9594a472 +type: git_submodule +homepage: https://github.com/bird-chinese-community/BIRD-tm-language-grammar.git +license: mpl-2.0 +licenses: +- sources: LICENSE.sample + text: | + MIT License + + Copyright (c) 2025 Alice39s + + Permission is hereby granted, free of charge, to any person obtaining a copy + of this software and associated documentation files (the "Software"), to deal + in the Software without restriction, including without limitation the rights + to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + copies of the Software, and to permit persons to whom the Software is + furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in all + copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + SOFTWARE. +- sources: LICENSE.syntax + text: | + # Mozilla Public License Version 2.0 + + 1. Definitions + + --- + + 1.1. "Contributor" + means each individual or legal entity that creates, contributes to + the creation of, or owns Covered Software. + + 1.2. "Contributor Version" + means the combination of the Contributions of others (if any) used + by a Contributor and that particular Contributor's Contribution. + + 1.3. "Contribution" + means Covered Software of a particular Contributor. + + 1.4. "Covered Software" + means Source Code Form to which the initial Contributor has attached + the notice in Exhibit A, the Executable Form of such Source Code + Form, and Modifications of such Source Code Form, in each case + including portions thereof. + + 1.5. "Incompatible With Secondary Licenses" + means + + (a) that the initial Contributor has attached the notice described + in Exhibit B to the Covered Software; or + + (b) that the Covered Software was made available under the terms of + version 1.1 or earlier of the License, but not also under the + terms of a Secondary License. + + 1.6. "Executable Form" + means any form of the work other than Source Code Form. + + 1.7. "Larger Work" + means a work that combines Covered Software with other material, in + a separate file or files, that is not Covered Software. + + 1.8. "License" + means this document. + + 1.9. "Licensable" + means having the right to grant, to the maximum extent possible, + whether at the time of the initial grant or subsequently, any and + all of the rights conveyed by this License. + + 1.10. "Modifications" + means any of the following: + + (a) any file in Source Code Form that results from an addition to, + deletion from, or modification of the contents of Covered + Software; or + + (b) any new file in Source Code Form that contains any Covered + Software. + + 1.11. "Patent Claims" of a Contributor + means any patent claim(s), including without limitation, method, + process, and apparatus claims, in any patent Licensable by such + Contributor that would be infringed, but for the grant of the + License, by the making, using, selling, offering for sale, having + made, import, or transfer of either its Contributions or its + Contributor Version. + + 1.12. "Secondary License" + means either the GNU General Public License, Version 2.0, the GNU + Lesser General Public License, Version 2.1, the GNU Affero General + Public License, Version 3.0, or any later versions of those + licenses. + + 1.13. "Source Code Form" + means the form of the work preferred for making modifications. + + 1.14. "You" (or "Your") + means an individual or a legal entity exercising rights under this + License. For legal entities, "You" includes any entity that + controls, is controlled by, or is under common control with You. For + purposes of this definition, "control" means (a) the power, direct + or indirect, to cause the direction or management of such entity, + whether by contract or otherwise, or (b) ownership of more than + fifty percent (50%) of the outstanding shares or beneficial + ownership of such entity. + + 2. License Grants and Conditions + + --- + + 2.1. Grants + + Each Contributor hereby grants You a world-wide, royalty-free, + non-exclusive license: + + (a) under intellectual property rights (other than patent or trademark) + Licensable by such Contributor to use, reproduce, make available, + modify, display, perform, distribute, and otherwise exploit its + Contributions, either on an unmodified basis, with Modifications, or + as part of a Larger Work; and + + (b) under Patent Claims of such Contributor to make, use, sell, offer + for sale, have made, import, and otherwise transfer either its + Contributions or its Contributor Version. + + 2.2. Effective Date + + The licenses granted in Section 2.1 with respect to any Contribution + become effective for each Contribution on the date the Contributor first + distributes such Contribution. + + 2.3. Limitations on Grant Scope + + The licenses granted in this Section 2 are the only rights granted under + this License. No additional rights or licenses will be implied from the + distribution or licensing of Covered Software under this License. + Notwithstanding Section 2.1(b) above, no patent license is granted by a + Contributor: + + (a) for any code that a Contributor has removed from Covered Software; + or + + (b) for infringements caused by: (i) Your and any other third party's + modifications of Covered Software, or (ii) the combination of its + Contributions with other software (except as part of its Contributor + Version); or + + (c) under Patent Claims infringed by Covered Software in the absence of + its Contributions. + + This License does not grant any rights in the trademarks, service marks, + or logos of any Contributor (except as may be necessary to comply with + the notice requirements in Section 3.4). + + 2.4. Subsequent Licenses + + No Contributor makes additional grants as a result of Your choice to + distribute the Covered Software under a subsequent version of this + License (see Section 10.2) or under the terms of a Secondary License (if + permitted under the terms of Section 3.3). + + 2.5. Representation + + Each Contributor represents that the Contributor believes its + Contributions are its original creation(s) or it has sufficient rights + to grant the rights to its Contributions conveyed by this License. + + 2.6. Fair Use + + This License is not intended to limit any rights You have under + applicable copyright doctrines of fair use, fair dealing, or other + equivalents. + + 2.7. Conditions + + Sections 3.1, 3.2, 3.3, and 3.4 are conditions of the licenses granted + in Section 2.1. + + 3. Responsibilities + + --- + + 3.1. Distribution of Source Form + + All distribution of Covered Software in Source Code Form, including any + Modifications that You create or to which You contribute, must be under + the terms of this License. You must inform recipients that the Source + Code Form of the Covered Software is governed by the terms of this + License, and how they can obtain a copy of this License. You may not + attempt to alter or restrict the recipients' rights in the Source Code + Form. + + 3.2. Distribution of Executable Form + + If You distribute Covered Software in Executable Form then: + + (a) such Covered Software must also be made available in Source Code + Form, as described in Section 3.1, and You must inform recipients of + the Executable Form how they can obtain a copy of such Source Code + Form by reasonable means in a timely manner, at a charge no more + than the cost of distribution to the recipient; and + + (b) You may distribute such Executable Form under the terms of this + License, or sublicense it under different terms, provided that the + license for the Executable Form does not attempt to limit or alter + the recipients' rights in the Source Code Form under this License. + + 3.3. Distribution of a Larger Work + + You may create and distribute a Larger Work under terms of Your choice, + provided that You also comply with the requirements of this License for + the Covered Software. If the Larger Work is a combination of Covered + Software with a work governed by one or more Secondary Licenses, and the + Covered Software is not Incompatible With Secondary Licenses, this + License permits You to additionally distribute such Covered Software + under the terms of such Secondary License(s), so that the recipient of + the Larger Work may, at their option, further distribute the Covered + Software under the terms of either this License or such Secondary + License(s). + + 3.4. Notices + + You may not remove or alter the substance of any license notices + (including copyright notices, patent notices, disclaimers of warranty, + or limitations of liability) contained within the Source Code Form of + the Covered Software, except that You may alter any license notices to + the extent required to remedy known factual inaccuracies. + + 3.5. Application of Additional Terms + + You may choose to offer, and to charge a fee for, warranty, support, + indemnity or liability obligations to one or more recipients of Covered + Software. However, You may do so only on Your own behalf, and not on + behalf of any Contributor. You must make it absolutely clear that any + such warranty, support, indemnity, or liability obligation is offered by + You alone, and You hereby agree to indemnify every Contributor for any + liability incurred by such Contributor as a result of warranty, support, + indemnity or liability terms You offer. You may include additional + disclaimers of warranty and limitations of liability specific to any + jurisdiction. + + 4. Inability to Comply Due to Statute or Regulation + + --- + + If it is impossible for You to comply with any of the terms of this + License with respect to some or all of the Covered Software due to + statute, judicial order, or regulation then You must: (a) comply with + the terms of this License to the maximum extent possible; and (b) + describe the limitations and the code they affect. Such description must + be placed in a text file included with all distributions of the Covered + Software under this License. Except to the extent prohibited by statute + or regulation, such description must be sufficiently detailed for a + recipient of ordinary skill to be able to understand it. + + 5. Termination + + --- + + 5.1. The rights granted under this License will terminate automatically + if You fail to comply with any of its terms. However, if You become + compliant, then the rights granted under this License from a particular + Contributor are reinstated (a) provisionally, unless and until such + Contributor explicitly and finally terminates Your grants, and (b) on an + ongoing basis, if such Contributor fails to notify You of the + non-compliance by some reasonable means prior to 60 days after You have + come back into compliance. Moreover, Your grants from a particular + Contributor are reinstated on an ongoing basis if such Contributor + notifies You of the non-compliance by some reasonable means, this is the + first time You have received notice of non-compliance with this License + from such Contributor, and You become compliant prior to 30 days after + Your receipt of the notice. + + 5.2. If You initiate litigation against any entity by asserting a patent + infringement claim (excluding declaratory judgment actions, + counter-claims, and cross-claims) alleging that a Contributor Version + directly or indirectly infringes any patent, then the rights granted to + You by any and all Contributors for the Covered Software under Section + 2.1 of this License shall terminate. + + 5.3. In the event of termination under Sections 5.1 or 5.2 above, all + end user license agreements (excluding distributors and resellers) which + have been validly granted by You or Your distributors under this License + prior to termination shall survive termination. + + --- + + - * + - 6. Disclaimer of Warranty \* + - ------------------------- \* + - * + - Covered Software is provided under this License on an "as is" \* + - basis, without warranty of any kind, either expressed, implied, or \* + - statutory, including, without limitation, warranties that the \* + - Covered Software is free of defects, merchantable, fit for a \* + - particular purpose or non-infringing. The entire risk as to the \* + - quality and performance of the Covered Software is with You. \* + - Should any Covered Software prove defective in any respect, You \* + - (not any Contributor) assume the cost of any necessary servicing, \* + - repair, or correction. This disclaimer of warranty constitutes an \* + - essential part of this License. No use of any Covered Software is \* + - authorized under this License except under this disclaimer. \* + - * + + --- + + --- + + - * + - 7. Limitation of Liability \* + - -------------------------- \* + - * + - Under no circumstances and under no legal theory, whether tort \* + - (including negligence), contract, or otherwise, shall any \* + - Contributor, or anyone who distributes Covered Software as \* + - permitted above, be liable to You for any direct, indirect, \* + - special, incidental, or consequential damages of any character \* + - including, without limitation, damages for lost profits, loss of \* + - goodwill, work stoppage, computer failure or malfunction, or any \* + - and all other commercial damages or losses, even if such party \* + - shall have been informed of the possibility of such damages. This \* + - limitation of liability shall not apply to liability for death or \* + - personal injury resulting from such party's negligence to the \* + - extent applicable law prohibits such limitation. Some \* + - jurisdictions do not allow the exclusion or limitation of \* + - incidental or consequential damages, so this exclusion and \* + - limitation may not apply to You. \* + - * + + --- + + 8. Litigation + + --- + + Any litigation relating to this License may be brought only in the + courts of a jurisdiction where the defendant maintains its principal + place of business and such litigation shall be governed by laws of that + jurisdiction, without reference to its conflict-of-law provisions. + Nothing in this Section shall prevent a party's ability to bring + cross-claims or counter-claims. + + 9. Miscellaneous + + --- + + This License represents the complete agreement concerning the subject + matter hereof. If any provision of this License is held to be + unenforceable, such provision shall be reformed only to the extent + necessary to make it enforceable. Any law or regulation which provides + that the language of a contract shall be construed against the drafter + shall not be used to construe this License against a Contributor. + + 10. Versions of the License + + --- + + 10.1. New Versions + + Mozilla Foundation is the license steward. Except as provided in Section + 10.3, no one other than the license steward has the right to modify or + publish new versions of this License. Each version will be given a + distinguishing version number. + + 10.2. Effect of New Versions + + You may distribute the Covered Software under the terms of the version + of the License under which You originally received the Covered Software, + or under the terms of any subsequent version published by the license + steward. + + 10.3. Modified Versions + + If you create software not governed by this License, and you want to + create a new license for such software, you may create and use a + modified version of this License if you rename the license and remove + any references to the name of the license steward (except to note that + such modified license differs from this License). + + 10.4. Distributing Source Code Form that is Incompatible With Secondary + Licenses + + If You choose to distribute Source Code Form that is Incompatible With + Secondary Licenses under the terms of this version of the License, the + notice described in Exhibit B of this License must be attached. + + ## Exhibit A - Source Code Form License Notice + + This Source Code Form is subject to the terms of the Mozilla Public + License, v. 2.0. If a copy of the MPL was not distributed with this + file, You can obtain one at https://mozilla.org/MPL/2.0/. + + If it is not possible or desirable to put the notice in a particular + file, then You may include the notice in a location (such as a LICENSE + file in a relevant directory) where a recipient would be likely to look + for such a notice. + + You may add additional accurate notices of copyright ownership. + + ## Exhibit B - "Incompatible With Secondary Licenses" Notice + + This Source Code Form is "Incompatible With Secondary Licenses", as + defined by the Mozilla Public License, v. 2.0. +- sources: README.md + text: '' +notices: []