Index: src/sys/net/bridgestp.c =================================================================== RCS file: /local/mirror/FreeBSD/r/ncvs/src/sys/net/bridgestp.c,v retrieving revision 1.31 diff -u -p -r1.31 bridgestp.c --- src/sys/net/bridgestp.c 27 Nov 2006 00:35:40 -0000 1.31 +++ src/sys/net/bridgestp.c 4 Dec 2006 12:01:00 -0000 @@ -1637,7 +1637,10 @@ bstp_set_edge(struct bstp_port *bp, int struct bstp_state *bs = bp->bp_bs; BSTP_LOCK(bs); - bp->bp_operedge = set; + if ((bp->bp_operedge = set) == 0) + bp->bp_flags &= ~BSTP_PORT_ADMEDGE; + else + bp->bp_flags |= BSTP_PORT_ADMEDGE; BSTP_UNLOCK(bs); return (0); } @@ -1809,8 +1812,12 @@ bstp_ifupdstatus(struct bstp_state *bs, if (bp->bp_role == BSTP_ROLE_DISABLED) bstp_enable_port(bs, bp); } else { - if (bp->bp_role != BSTP_ROLE_DISABLED) + if (bp->bp_role != BSTP_ROLE_DISABLED) { bstp_disable_port(bs, bp); + if ((bp->bp_flags & BSTP_PORT_ADMEDGE) && + bp->bp_protover == BSTP_PROTO_RSTP) + bp->bp_operedge = 1; + } } return; } Index: src/sys/net/bridgestp.h =================================================================== RCS file: /local/mirror/FreeBSD/r/ncvs/src/sys/net/bridgestp.h,v retrieving revision 1.10 diff -u -p -r1.10 bridgestp.h --- src/sys/net/bridgestp.h 1 Dec 2006 18:25:18 -0000 1.10 +++ src/sys/net/bridgestp.h 4 Dec 2006 12:01:00 -0000 @@ -109,6 +109,7 @@ #define BSTP_PORT_ADMCOST 0x0008 #define BSTP_PORT_AUTOEDGE 0x0010 #define BSTP_PORT_AUTOP2P 0x0020 +#define BSTP_PORT_ADMEDGE 0x0040 /* BPDU priority */ #define BSTP_PDU_SUPERIOR 1 Index: src/sys/net/if_bridge.c =================================================================== RCS file: /local/mirror/FreeBSD/r/ncvs/src/sys/net/if_bridge.c,v retrieving revision 1.90 diff -u -p -r1.90 if_bridge.c --- src/sys/net/if_bridge.c 3 Dec 2006 21:50:57 -0000 1.90 +++ src/sys/net/if_bridge.c 4 Dec 2006 12:01:01 -0000 @@ -1024,6 +1024,10 @@ bridge_ioctl_gifflags(struct bridge_soft req->ifbr_ifsflags |= IFBIF_BSTP_P2P; if (bp->bp_flags & BSTP_PORT_AUTOP2P) req->ifbr_ifsflags |= IFBIF_BSTP_AUTOP2P; + if (bp->bp_flags & BSTP_PORT_ADMEDGE) + req->ifbr_ifsflags |= IFBIF_BSTP_ADMEDGE; + if (bp->bp_flags & BSTP_PORT_ADMCOST) + req->ifbr_ifsflags |= IFBIF_BSTP_ADMCOST; return (0); } Index: src/sys/net/if_bridgevar.h =================================================================== RCS file: /local/mirror/FreeBSD/r/ncvs/src/sys/net/if_bridgevar.h,v retrieving revision 1.18 diff -u -p -r1.18 if_bridgevar.h --- src/sys/net/if_bridgevar.h 27 Nov 2006 00:35:40 -0000 1.18 +++ src/sys/net/if_bridgevar.h 4 Dec 2006 12:01:01 -0000 @@ -140,11 +140,14 @@ struct ifbreq { #define IFBIF_BSTP_AUTOEDGE 0x0040 /* member stp autoedge enabled */ #define IFBIF_BSTP_P2P 0x0080 /* member stp p2p */ #define IFBIF_BSTP_AUTOP2P 0x0100 /* member stp autop2p enabled */ +#define IFBIF_BSTP_ADMEDGE 0x0200 /* member stp admin edge enabled */ +#define IFBIF_BSTP_ADMCOST 0x0400 /* member stp admin path cost */ #define IFBIFBITS "\020\001LEARNING\002DISCOVER\003STP\004SPAN" \ "\005STICKY\006EDGE\007AUTOEDGE\010P2P\011AUTOP2P" #define IFBIFMASK ~(IFBIF_BSTP_EDGE|IFBIF_BSTP_AUTOEDGE|IFBIF_BSTP_P2P| \ - IFBIF_BSTP_AUTOP2P) /* not saved */ + IFBIF_BSTP_AUTOP2P|IFBIF_BSTP_ADMEDGE| \ + IFBIF_BSTP_ADMCOST) /* not saved */ /* BRDGFLUSH */ #define IFBF_FLUSHDYN 0x00 /* flush learned addresses only */