What the Network Port Object Is
The Network Port object, defined in Clause 12.56 of ANSI/ASHRAE 135-2024, models one network interface of a BACnet device: an Ethernet BACnet/IP port, an MS/TP (Master-Slave/Token-Passing) trunk, a BACnet SC connection, and so on. A device has one Network Port object per interface, and the object exposes that interface’s addressing and datalink settings as readable and writable BACnet properties.
Its purpose is runtime configuration. Before the Network Port object, changing a device’s IP address or BACnet BBMD table meant a vendor tool; the Network Port object standardizes those settings so any BACnet client can read and change them. Writes are staged, not applied immediately: Changes_Pending flags that edits are waiting, and a ReinitializeDevice request with ACTIVATE_CHANGES commits them. Writing Command with discard-changes throws the staged edits away instead; the other Command values act on the port directly and are not the commit path.
Where You’ll See It
- IP and network commissioning. Reading and setting a device’s IP address, subnet mask, gateway, and BACnet/IP UDP port over BACnet instead of a serial tool.
- BBMD configuration. Editing the Broadcast Distribution Table and viewing the Foreign Device Table (populated by registration, not by write) on a device acting as a BACnet BBMD.
- MS/TP tuning. Reading
Max_MasterandMax_Info_Frameson an MS/TP port. ReadingNetwork Port 4194303(the wildcard) with ReadProperty returns the port that received the request.
Required Properties
Clause 12.56 requires every Network Port object to provide these properties. Datatypes are the spec’s names: Unsigned is an integer, REAL a floating-point number, BOOLEAN a true/false flag, and the BACnet-prefixed types are structured values defined by the standard.
| Property | Datatype | What it holds |
|---|---|---|
Object_Identifier | BACnetObjectIdentifier | The object’s type and instance number, unique within the device |
Object_Name | CharacterString | The human-readable interface name |
Object_Type | BACnetObjectType | Always network-port for this object |
Status_Flags | BACnetStatusFlags | Four health flags: in-alarm, fault, overridden, out-of-service |
Reliability | BACnetReliability | Why the port is unreliable, if it is |
Out_Of_Service | BOOLEAN | When true, the port is decoupled for testing |
Network_Type | BACnetNetworkType | The datalink type (ipv4, ipv6, mstp, ethernet, secure-connect) |
Protocol_Level | BACnetProtocolLevel | The protocol level the port operates at |
Network_Number | Unsigned | The BACnet network number this port connects to |
Network_Number_Quality | BACnetNetworkNumberQuality | How the network number was learned (configured, learned, unknown) |
Changes_Pending | BOOLEAN | True when edited properties are staged but not yet applied |
APDU_Length | Unsigned | The maximum APDU (Application Protocol Data Unit) length for this port |
Link_Speed | REAL | The datalink speed, in bits per second |
Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | The list of properties this instance implements |
Optional Properties
Most of the Network Port object is optional because the relevant set depends on the interface type: an IPv4 port implements the IP_* group, an MS/TP port the Max_Master and slave-proxy group, a BACnet BBMD the BBMD_* group. The properties integrators touch most are IP_Address, IP_Subnet_Mask, IP_Default_Gateway, and the BBMD_Broadcast_Distribution_Table.
| Property | Datatype | Group |
|---|---|---|
Description | CharacterString | General |
Reference_Port | Unsigned | General |
Command | BACnetNetworkPortCommand | General |
MAC_Address | OctetString | General |
Link_Speeds | BACnetARRAY[N] of REAL | General |
Link_Speed_Autonegotiate | BOOLEAN | General |
Network_Interface_Name | CharacterString | General |
BACnet_IP_Mode | BACnetIPMode | BACnet/IP |
IP_Address | OctetString | BACnet/IP |
BACnet_IP_UDP_Port | Unsigned | BACnet/IP |
IP_Subnet_Mask | OctetString | BACnet/IP |
IP_Default_Gateway | OctetString | BACnet/IP |
BACnet_IP_Multicast_Address | OctetString | BACnet/IP |
IP_DNS_Server | BACnetARRAY[N] of OctetString | BACnet/IP |
IP_DHCP_Enable | BOOLEAN | BACnet/IP |
IP_DHCP_Lease_Time | Unsigned | BACnet/IP |
IP_DHCP_Lease_Time_Remaining | Unsigned | BACnet/IP |
IP_DHCP_Server | OctetString | BACnet/IP |
BACnet_IP_NAT_Traversal | BOOLEAN | BACnet/IP |
BACnet_IP_Global_Address | BACnetHostNPort | BACnet/IP |
BBMD_Broadcast_Distribution_Table | BACnetLIST of BACnetBDTEntry | BACnet BBMD |
BBMD_Accept_FD_Registrations | BOOLEAN | BACnet BBMD |
BBMD_Foreign_Device_Table | BACnetLIST of BACnetFDTEntry | BACnet BBMD |
FD_BBMD_Address | BACnetHostNPort | Foreign device |
FD_Subscription_Lifetime | Unsigned16 | Foreign device |
BACnet_IPv6_Mode | BACnetIPMode | BACnet/IPv6 |
IPv6_Address | OctetString | BACnet/IPv6 |
IPv6_Prefix_Length | Unsigned | BACnet/IPv6 |
BACnet_IPv6_UDP_Port | Unsigned | BACnet/IPv6 |
IPv6_Default_Gateway | OctetString | BACnet/IPv6 |
BACnet_IPv6_Multicast_Address | OctetString | BACnet/IPv6 |
IPv6_DNS_Server | BACnetARRAY[N] of OctetString | BACnet/IPv6 |
IPv6_Auto_Addressing_Enable | BOOLEAN | BACnet/IPv6 |
IPv6_DHCP_Lease_Time | Unsigned | BACnet/IPv6 |
IPv6_DHCP_Lease_Time_Remaining | Unsigned | BACnet/IPv6 |
IPv6_DHCP_Server | OctetString | BACnet/IPv6 |
IPv6_Zone_Index | CharacterString | BACnet/IPv6 |
Max_Master | Unsigned | MS/TP |
Max_Info_Frames | Unsigned | MS/TP |
Slave_Proxy_Enable | BOOLEAN | MS/TP |
Manual_Slave_Address_Binding | BACnetLIST of BACnetAddressBinding | MS/TP |
Auto_Slave_Discovery | BOOLEAN | MS/TP |
Slave_Address_Binding | BACnetLIST of BACnetAddressBinding | MS/TP |
Max_BVLC_Length_Accepted | Unsigned16 | BACnet SC |
Max_NPDU_Length_Accepted | Unsigned16 | BACnet SC |
SC_Primary_Hub_URI | CharacterString | BACnet SC |
SC_Failover_Hub_URI | CharacterString | BACnet SC |
SC_Minimum_Reconnect_Time | Unsigned16 | BACnet SC |
SC_Maximum_Reconnect_Time | Unsigned16 | BACnet SC |
SC_Connect_Wait_Timeout | Unsigned16 | BACnet SC |
SC_Disconnect_Wait_Timeout | Unsigned16 | BACnet SC |
SC_Heartbeat_Timeout | Unsigned16 | BACnet SC |
SC_Hub_Connector_State | BACnetSCHubConnectorState | BACnet SC |
SC_Primary_Hub_Connection_Status | BACnetSCHubConnection | BACnet SC |
SC_Failover_Hub_Connection_Status | BACnetSCHubConnection | BACnet SC |
SC_Hub_Function_Enable | BOOLEAN | BACnet SC |
SC_Failed_Connection_Requests | BACnetLIST of BACnetSCFailedConnectionRequest | BACnet SC |
SC_Hub_Function_Accept_URIs | BACnetARRAY[N] of CharacterString | BACnet SC |
SC_Hub_Function_Binding | CharacterString | BACnet SC |
SC_Hub_Function_Connection_Status | BACnetLIST of BACnetSCHubFunctionConnection | BACnet SC |
SC_Direct_Connect_Initiate_Enable | BOOLEAN | BACnet SC |
SC_Direct_Connect_Accept_Enable | BOOLEAN | BACnet SC |
SC_Direct_Connect_Accept_URIs | BACnetARRAY[N] of CharacterString | BACnet SC |
SC_Direct_Connect_Binding | CharacterString | BACnet SC |
SC_Direct_Connect_Connection_Status | BACnetLIST of BACnetSCDirectConnection | BACnet SC |
Operational_Certificate_File | BACnetObjectIdentifier | BACnet SC |
Issuer_Certificate_Files | BACnetARRAY[N] of BACnetObjectIdentifier | BACnet SC |
Certificate_Signing_Request_File | BACnetObjectIdentifier | BACnet SC |
Virtual_MAC_Address_Table | BACnetLIST of BACnetVMACEntry | Routing |
Routing_Table | BACnetLIST of BACnetRouterEntry | Routing |
Event_Detection_Enable | BOOLEAN | Intrinsic reporting |
Notification_Class | Unsigned | Intrinsic reporting |
Event_Enable | BACnetEventTransitionBits | Intrinsic reporting |
Acked_Transitions | BACnetEventTransitionBits | Intrinsic reporting |
Notify_Type | BACnetNotifyType | Intrinsic reporting |
Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | Intrinsic reporting |
Event_Message_Texts | BACnetARRAY[3] of CharacterString | Intrinsic reporting |
Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | Intrinsic reporting |
Event_State | BACnetEventState | Intrinsic reporting |
Reliability_Evaluation_Inhibit | BOOLEAN | Intrinsic reporting |
Audit_Level | BACnetAuditLevel | Auditing |
Auditable_Operations | BACnetAuditOperationFlags | Auditing |
Tags | BACnetARRAY[N] of BACnetNameValue | Tagging and profile |
Profile_Location | CharacterString | Tagging and profile |
Profile_Name | CharacterString | Tagging and profile |
The BACnet SC Property Group
On a BACnet Secure Connect port, the Network Port object is the whole configuration and diagnostic surface for the datalink. Annex AB defines no separate management protocol, so the properties above are how a BACnet client reads and changes BACnet SC behavior.
- Hub connection.
SC_Primary_Hub_URIandSC_Failover_Hub_URIare thewss://addresses the node connects outbound to.SC_Hub_Connector_Statereports which one is active. Hub redundancy lives here, on the node, not on the hub: the node decides when to fall back. - Why a node was rejected.
SC_Failed_Connection_Requestsrecords the timestamp, peer address, VMAC, UUID, and error for each connection attempt this device refused, whether the hub function turned it away or direct-connect accept did. When a controller silently will not join, this is the first property to read on the device that rejected it. It is usually the difference between “certificate expired” and “clock skew”, without a packet capture you could not decrypt anyway. - The hub function.
SC_Hub_Function_Enableis what turns a node into the hub.SC_Hub_Function_Connection_Statuslists the nodes currently connected, which is the fastest answer to “is that controller actually online.” - Direct connect. The initiate and accept enables are separate properties, so a device can accept peer connections without ever opening one, or the reverse. See NM-SCDC-B.
- Certificates.
Operational_Certificate_File,Issuer_Certificate_Files, andCertificate_Signing_Request_Filepoint at File objects, which is what lets certificate provisioning run over ordinary atomic file transfer. See NM-SCCM-A. - Reconnect behavior.
SC_Minimum_Reconnect_TimeandSC_Maximum_Reconnect_Timebound the backoff a node uses after losing the hub. They exist because a hub restart on a site with hundreds of nodes is a thundering herd, and the randomized window between the two values is what spreads the reconnect storm out.
Related Objects
- Device: summarizes the device’s identity and capabilities; the Network Port objects carry the per-interface network detail.
The Network Port object is also where BACnet BBMD tables and device-address proxying are configured, the surface NM-BBMDC-B and NM-RC-B require a device to expose.
What Chipkin Provides
The Network Port object, including the BACnet/IP, IPv6, BBMD, MS/TP, and BACnet SC property groups and the staged-changes model, is implemented in the CAS BACnet Stack, exposed for read in 5.x. Two caveats: automatic fallback from the primary to the failover BACnet SC hub URI is a CAS BACnet Stack 6.x item, so do not design 5.x redundancy around it (see BACnet SC in the CAS BACnet Stack); and BDT writes landing end to end through standard WriteProperty are also a 6.x target rather than a 5.x capability (see How BACnet Networks Scale). Talk to us about modeling your device’s points.