The branch main has been updated by kp:

URL: 
https://cgit.FreeBSD.org/src/commit/?id=0bd4a6837c4bc3dd6168c5679c21c58d41a6910e

commit 0bd4a6837c4bc3dd6168c5679c21c58d41a6910e
Author:     Kristof Provost <[email protected]>
AuthorDate: 2023-04-26 14:59:40 +0000
Commit:     Kristof Provost <[email protected]>
CommitDate: 2023-07-21 10:32:18 +0000

    pfctl: SCTP can have port numbers
    
    MFC after:      3 weeks
    Sponsored by:   Orange Business Services
    Differential Revision:  https://reviews.freebsd.org/D40861
---
 sbin/pfctl/parse.y | 14 +++++++++-----
 1 file changed, 9 insertions(+), 5 deletions(-)

diff --git a/sbin/pfctl/parse.y b/sbin/pfctl/parse.y
index 1a0935ce599b..390888526006 100644
--- a/sbin/pfctl/parse.y
+++ b/sbin/pfctl/parse.y
@@ -5274,8 +5274,9 @@ filter_consistent(struct pfctl_rule *r, int anchor_call)
        int     problems = 0;
 
        if (r->proto != IPPROTO_TCP && r->proto != IPPROTO_UDP &&
+           r->proto != IPPROTO_SCTP &&
            (r->src.port_op || r->dst.port_op)) {
-               yyerror("port only applies to tcp/udp");
+               yyerror("port only applies to tcp/udp/sctp");
                problems++;
        }
        if (r->proto != IPPROTO_ICMP && r->proto != IPPROTO_ICMPV6 &&
@@ -5354,17 +5355,18 @@ rdr_consistent(struct pfctl_rule *r)
 {
        int                      problems = 0;
 
-       if (r->proto != IPPROTO_TCP && r->proto != IPPROTO_UDP) {
+       if (r->proto != IPPROTO_TCP && r->proto != IPPROTO_UDP &&
+           r->proto != IPPROTO_SCTP) {
                if (r->src.port_op) {
-                       yyerror("src port only applies to tcp/udp");
+                       yyerror("src port only applies to tcp/udp/sctp");
                        problems++;
                }
                if (r->dst.port_op) {
-                       yyerror("dst port only applies to tcp/udp");
+                       yyerror("dst port only applies to tcp/udp/sctp");
                        problems++;
                }
                if (r->rpool.proxy_port[0]) {
-                       yyerror("rpool port only applies to tcp/udp");
+                       yyerror("rpool port only applies to tcp/udp/sctp");
                        problems++;
                }
        }
@@ -6936,6 +6938,8 @@ getservice(char *n)
                s = getservbyname(n, "tcp");
                if (s == NULL)
                        s = getservbyname(n, "udp");
+               if (s == NULL)
+                       s = getservbyname(n, "sctp");
                if (s == NULL) {
                        yyerror("unknown port %s", n);
                        return (-1);

Reply via email to