Network Port
A Network Port object describes one network interface of the device: its network type, address and settings. A device has one for each data link it uses, and clients read them to learn how to reach the device and how it is configured. Some ports sit on top of others, so a BACnet/IP port can point to the port beneath it.
Typical uses
Section titled “Typical uses”- BACnet/IP port with address, subnet mask and UDP port
- MS/TP port with MAC address and Max_Master
- BACnet/SC port with hub URIs and certificates
- Virtual network port of a gateway device
- A port whose network number a client changes and then activates
Key properties
Section titled “Key properties”| Property | What it holds |
|---|---|
| Network_Type | The kind of network: IPv4, MS/TP, Ethernet, virtual, secure connect and others. |
| Protocol_Level | Where the port sits in the protocol stack, for example the BACnet application level or the physical level. |
| Network_Number | The BACnet network number of the port. A client write is held as a pending change until it is activated. |
| Reference_Port | Points to the Network Port that carries this port’s traffic, one layer down. A port at the lowest layer points to none. |
| Changes_Pending | True while a configuration change is waiting to be activated. |
| MAC_Address | The address of the device on this network, for example the IP address and port packed into six octets. |
How it behaves
Section titled “How it behaves”Network Port objects are not commandable and use no COV or event algorithm; the standard applies none to this type. Clients change port settings by writing them, then activating the changes with a ReinitializeDevice request, so a set of edits takes effect together.
With the CAS BACnet Stack
Section titled “With the CAS BACnet Stack”Enable it with the STACK_OPTION_OBJECT_TYPE_NETWORK_PORT build option. Do not use BACnetStack_AddObject; add each port with BACnetStack_AddNetworkPortObject, giving the network type, protocol level, network number, its quality and the reference port. The stack always answers Network_Number, Changes_Pending, APDU_Length, MAC_Address and the BACnet/SC settings itself. For a BACnet/IP port it builds MAC_Address from IP_Address and BACnet_IP_UDP_Port; for an MS/TP port it reads the one-octet MAC through the callback you register with BACnetStack_RegisterCallbackGetPropertyOctetString; for a BACnet/SC port it takes it from the secure-connect state; for a BACnet/IPv6 port it is the device’s three-octet VMAC, and the stack also answers Virtual_MAC_Address_Table, BACnet_IPv6_Mode and, until you serve it, BACnet_IPv6_Multicast_Address ([FF02::BAC0]:47808, eighteen octets: the address and then the UDP port). It also stores Network_Type, Protocol_Level, Reference_Port and Network_Number_Quality, but for these a Get callback that answers wins. Other properties, such as the IP address and subnet mask, come from your callbacks. A client’s write to Network_Number is held as a pending change until a ReinitializeDevice request or BACnetStack_ActivateNetworkPortPendingChanges activates it. A client’s write to a BACnet/IP or BACnet/IPv6 address property (the address, mask or prefix length, gateway, DNS server, automatic addressing, UDP port, IPv6 multicast address) is held pending the same way. On a BACnet/IPv6 port the stack also holds BACnet_IPv6_Mode, FD_BBMD_Address and FD_Subscription_Lifetime itself, and, in a build that also has STACK_OPTION_BVLL_BBMD (which needs BACnet/IP), BBMD_Broadcast_Distribution_Table and BBMD_Accept_FD_Registrations: a client writes them, they are held pending the same way, and activation hands them to the stack’s BACnet/IPv6 data link, which then acts as a foreign device or a BBMD. Without STACK_OPTION_BVLL_BBMD the BBMD properties are absent and BACnet_IPv6_Mode refuses BBMD. Your callbacks are never asked for these, and BBMD_Foreign_Device_Table is the data link’s table. A BDT entry or BBMD address must be an IPv6 address; a host name is refused. The ARCNET, point-to-point, LonTalk, ZigBee and generic Serial network types are not supported.
Related object types
Section titled “Related object types”Properties
Section titled “Properties”The properties ASHRAE 135-2024 clause 12.56 defines for this object type.
How to read the table:
- Conformance is what the standard asks of every object of this type: R is required, W is required and writable by a client, O is optional. A digit after the letter marks a condition in the standard that decides when the property is present or writable, such as support for intrinsic reporting.
- Present by default: yes means the stack presents the property as soon as you add the object; no means it
is optional and you turn it on with
BACnetStack_SetPropertyEnabled. This is the stack’s starting setup, so it can differ from the conformance code. - Writable is whether a client can write the property by default. Change it with
BACnetStack_SetPropertyWritable. - not in profile means the stack does not offer this property for this object type.
- Value when your callback does not answer: “Held by the stack” means the stack stores and serves the value itself and does not ask your callbacks. Otherwise it is the value the stack answers when your callback declines or is not registered.
| Property | Datatype | Conformance | Present by default | Writable | Value when your callback does not answer |
|---|---|---|---|---|---|
| Object_Identifier | BACnetObjectIdentifier | R | yes | no | Held by the stack. |
| Object_Name | CharacterString | R | yes | no | "Object <type>,<instance>", such as "Object 0,1" for Analog Input 1. |
| Object_Type | BACnetObjectType | R | yes | no | Held by the stack. |
| Description | CharacterString | O | no | no | "" |
| Status_Flags | BACnetStatusFlags | R | yes | no | Built by the stack from your callbacks. |
| Reliability | BACnetReliability | R | yes | no | 0 |
| Out_Of_Service | Boolean | R | yes | no | false |
| Network_Type | BACnetNetworkType | R | yes | no | Held by the stack; a Get callback that answers wins. |
| Protocol_Level | BACnetProtocolLevel | R | yes | no | Held by the stack; a Get callback that answers wins. |
| Reference_Port | Unsigned | O1 | no | no | Held by the stack; a Get callback that answers wins. |
| Additional_Reference_Ports | BACnetLIST of Unsigned | O2 | no | no | 0 |
| Changes_Pending | Boolean | R | yes | no | Held by the stack. |
| Command | BACnetNetworkPortCommand | O3 | no | yes | Held by the stack; a Get callback that answers wins. |
| Current_Health | BACnetHealth | O | no | no | No default: the read fails. |
| Command_Validation_Result | BACnetHealth | O | no | no | No default: the read fails. |
| Event_Detection_Enable | Boolean | O5 | no | no | false |
| Notification_Class | Unsigned | O5 | no | no | 0 |
| Event_Enable | BACnetEventTransitionBits | O5 | no | no | An empty bit string. |
| Acked_Transitions | BACnetEventTransitionBits | O5 | no | no | An empty bit string. |
| Notify_Type | BACnetNotifyType | O5 | no | no | 0 |
| Event_Time_Stamps | BACnetARRAY[3] of BACnetTimeStamp | O5 | no | no | No default: the read fails. |
| Event_Message_Texts | BACnetARRAY[3] of CharacterString | O5 | no | no | "" |
| Event_Message_Texts_Config | BACnetARRAY[3] of CharacterString | O5 | no | no | "" |
| Event_State | BACnetEventState | O4 | no | no | 0 |
| Reliability_Evaluation_Inhibit | Boolean | O | no | no | false |
| Property_List | BACnetARRAY[N] of BACnetPropertyIdentifier | R | yes | no | Held by the stack. |
| Audit_Level | BACnetAuditLevel | O6 | not in profile | not in profile | No default: the read fails. |
| Auditable_Operations | BACnetAuditOperationFlags | O6 | not in profile | not in profile | No default: the read fails. |
| Tags | BACnetARRAY[N] of BACnetNameValue | O | no | no | No default: the read fails. |
| Profile_Location | CharacterString | O | no | no | "" |
| Profile_Name | CharacterString | O | no | no | "" |
| Network_Number | Unsigned16 | O | no | yes, held until activated | Held by the stack. |
| Network_Number_Quality | BACnetNetworkNumberQuality | O | no | no | Held by the stack; a Get callback that answers wins. |
| APDU_Length | Unsigned | O | no | no | Held by the stack. |
| Routing_Table | BACnetLIST of BACnetRouterEntry | O | no | no | Held by the stack; a Get callback that answers wins. |
| MAC_Address | OctetString | O | no | no | Held by the stack: built from IP_Address and BACnet_IP_UDP_Port on a BACnet/IP port, read from your octet-string callback on an MS/TP port, taken from the secure-connect state on a BACnet/SC port. |
| Link_Speed | Real | O | no | no | 0.0 |
| Link_Speeds | BACnetARRAY[N] of Real | O | no | no | 0.0 |
| Link_Speed_Autonegotiate | Boolean | O | no | no | false |
| Network_Interface_Name | CharacterString | O | no | no | "" |
| Device_Address_Proxy_Enable | Boolean | O | no | yes | false |
| Device_Address_Proxy_Timeout | Unsigned | O | no | yes | 0 |
| BACnet_IP_Mode | BACnetIPMode | O | no | no | Held by the stack; a Get callback that answers wins. |
| BACnet_IP_UDP_Port | Unsigned16 | O | no | no | 0 |
| BACnet_IP_Multicast_Address | OctetString | O | no | yes | An empty octet string. |
| BACnet_IP_NAT_Traversal | Boolean | O | no | yes | false |
| BACnet_IP_Global_Address | BACnetHostNPort | O | no | yes | No default: the read fails. |
| BBMD_Broadcast_Distribution_Table | BACnetLIST of BACnetBDTEntry | O | no | yes | No default: the read fails. |
| BBMD_Accept_FD_Registrations | Boolean | O | no | yes | false |
| BBMD_Foreign_Device_Table | BACnetLIST of BACnetFDTEntry | O | no | no | No default: the read fails. |
| FD_BBMD_Address | BACnetHostNPort | O | no | no | The stack’s own foreign-device registration, or the not-configured value. |
| FD_Subscription_Lifetime | Unsigned16 | O | no | no | The time-to-live of the stack’s own foreign-device registration, or 0. |
| IP_Address | OctetString | O | no | no | An empty octet string. |
| IP_Subnet_Mask | OctetString | O | no | no | An empty octet string. |
| IP_Default_Gateway | OctetString | O | no | no | An empty octet string. |
| IP_DNS_Server | BACnetARRAY[N] of OctetString | O | no | no | A one-entry array holding 0.0.0.0 (not configured). |
| IP_DHCP_Enable | Boolean | O | no | no | false |
| IP_DHCP_Lease_Time | Unsigned | O | no | no | 0 |
| IP_DHCP_Lease_Time_Remaining | Unsigned | O | no | no | 0 |
| IP_DHCP_Server | OctetString | O | no | no | An empty octet string. |
| Virtual_MAC_Address_Table | BACnetLIST of BACnetVMACEntry | O | no | no | No default: the read fails. |
| BACnet_IPv6_Mode | BACnetIPMode | O | no | no | 0 |
| BACnet_IPv6_UDP_Port | Unsigned16 | O | no | no | 0 |
| BACnet_IPv6_Multicast_Address | OctetString | O | no | no | An empty octet string. |
| IPv6_Address | OctetString | O | no | no | An empty octet string. |
| IPv6_Prefix_Length | Unsigned8 | O | no | no | 0 |
| IPv6_Default_Gateway | OctetString | O | no | no | An empty octet string. |
| IPv6_DNS_Server | BACnetARRAY[N] of OctetString | O | no | no | An empty octet string. |
| IPv6_Auto_Addressing_Enable | Boolean | O | no | no | false |
| IPv6_DHCP_Lease_Time | Unsigned | O | no | no | 0 |
| IPv6_DHCP_Lease_Time_Remaining | Unsigned | O | no | no | 0 |
| IPv6_DHCP_Server | OctetString | O | no | no | An empty octet string. |
| IPv6_Zone_Index | CharacterString | O | no | no | "" |
| Subordinate_Proxy_Enable | Boolean | O | no | no | false |
| Manual_Subordinate_Address_Binding | BACnetLIST of BACnetAddressBinding | O | no | no | No default: the read fails. |
| Auto_Subordinate_Discovery | Boolean | O | no | no | false |
| Subordinate_Address_Binding | BACnetLIST of BACnetAddressBinding | O | no | no | No default: the read fails. |
| Max_Manager | Unsigned8 | O | no | no | 0 |
| Max_Info_Frames | Unsigned8 | O | no | no | 0 |
| Max_BVLC_Length_Accepted | Unsigned | O | no | yes | Held by the stack. |
| Max_NPDU_Length_Accepted | Unsigned | O | no | yes | Held by the stack. |
| SC_Primary_Hub_URI | CharacterString | O | no | yes | Held by the stack. |
| SC_Failover_Hub_URI | CharacterString | O | no | yes | Held by the stack. |
| SC_Minimum_Reconnect_Time | Unsigned | O | no | yes | Held by the stack. |
| SC_Maximum_Reconnect_Time | Unsigned | O | no | yes | Held by the stack. |
| SC_Connect_Wait_Timeout | Unsigned | O | no | yes | Held by the stack. |
| SC_Disconnect_Wait_Timeout | Unsigned | O | no | yes | Held by the stack. |
| SC_Heartbeat_Timeout | Unsigned | O | no | yes | Held by the stack. |
| SC_Hub_Connector_State | BACnetSCHubConnectorState | O | no | no | Held by the stack. |
| Operational_Certificate_File | BACnetObjectIdentifier | O | no | no | Held by the stack. |
| Issuer_Certificate_Files | BACnetARRAY[2] of BACnetObjectIdentifier | O | no | no | Held by the stack. |
| Certificate_Signing_Request_File | BACnetObjectIdentifier | O | no | no | Held by the stack. |
| SC_Primary_Hub_Connection_Status | BACnetSCHubConnection | O | no | no | No default: the read fails. |
| SC_Failover_Hub_Connection_Status | BACnetSCHubConnection | O | no | no | No default: the read fails. |
| SC_Hub_Function_Enable | Boolean | O | no | no | false |
| SC_Hub_Function_Accept_URIs | BACnetARRAY[N] of CharacterString | O | no | no | "" |
| SC_Hub_Function_Binding | CharacterString | O | no | no | "" |
| SC_Hub_Function_Connection_Status | BACnetLIST of BACnetSCHubFunctionConnection | O | no | no | No default: the read fails. |
| SC_Direct_Connect_Initiate_Enable | Boolean | O | no | yes | false |
| SC_Direct_Connect_Accept_Enable | Boolean | O | no | yes | false |
| SC_Direct_Connect_Accept_URIs | BACnetARRAY[N] of CharacterString | O | no | no | "" |
| SC_Direct_Connect_Binding | CharacterString | O | no | no | "" |
| SC_Direct_Connect_Connection_Status | BACnetLIST of BACnetSCDirectConnection | O | no | no | No default: the read fails. |
| SC_Failed_Connection_Requests | BACnetLIST of BACnetSCFailedConnectionRequest | O | no | no | No default: the read fails. |