pub struct BipServerBuilder { /* private fields */ }Expand description
BIP-specific builder that constructs BipTransport from interface/port/broadcast fields.
Implementations§
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn broadcast_address(self, addr: Ipv4Addr) -> Self
pub fn broadcast_address(self, addr: Ipv4Addr) -> Self
Set the directed broadcast address.
Sourcepub fn mode(self, mode: BipMode) -> Self
pub fn mode(self, mode: BipMode) -> Self
Set the B/IP mode: a normal node (the default), a foreign device or
a BBMD (#938). A foreign device’s build() doesn’t wait for its BBMD
to accept the registration; poll
BACnetServer::foreign_registration for how it went. A registered
Network Port reports the mode in BACnet_IP_Mode.
use bacnet_server::server::BACnetServer;
use bacnet_transport::bbmd::ForeignDevicePolicy;
use bacnet_transport::bip::{BbmdOptions, BipMode};
let builder = BACnetServer::bip_builder().mode(BipMode::Bbmd(BbmdOptions {
foreign_device_policy: Some(ForeignDevicePolicy::default()),
..BbmdOptions::default()
}));Sourcepub fn multicast(self, multicast: Option<BipMulticast>) -> Self
pub fn multicast(self, multicast: Option<BipMulticast>) -> Self
Make the server a B/IP-M node in multicast’s group (Annex J.8), or,
with None (the default), not: its broadcasts go to the group, and
it takes broadcasts only from the group. Needs an explicit
interface, and a nonzero port
unless the group has its own; build() fails on what
BipTransport::set_multicast
refuses. With BipMode::Bbmd
the server is the BBMD that serves the group (Annex J.8.3), and its
own BDT row must be two-hop. A registered Network Port serves the
group as BACnet_IP_Multicast_Address, writable when the server
answers ReinitializeDevice (#941); on a BBMD a written group is
activated together with the BDT, both or neither (#1963).
Bind the interface address itself, so devices on other addresses of
this host can share the port, each getting only its own unicast
(#1538). Off by default, which binds 0.0.0.0. Needs an explicit
interface and a nonzero port, or build fails.
See BipTransport::set_share_port_by_address for what changes.
Sourcepub fn mutation_policy(self, policy: MutationPolicy) -> Self
pub fn mutation_policy(self, policy: MutationPolicy) -> Self
Select local mutation authorization (default: MutationPolicy::Permissive).
SC mTLS channel/peer authentication is not service authorization.
use bacnet_server::{mutation::MutationPolicy, server::BACnetServer};
let builder = BACnetServer::bip_builder().mutation_policy(MutationPolicy::DenyAll);Sourcepub fn policy(self, policy: impl ServerPolicy) -> Self
pub fn policy(self, policy: impl ServerPolicy) -> Self
Install the server’s authorization policy; see ServerPolicy, or
FnPolicy to build one from closures.
It replaces any policy set before; put every decision in one policy
(one FnPolicy chain) rather than calling this twice.
use bacnet_server::server::BACnetServer;
use bacnet_server::FnPolicy;
// Refuse every remote write; LifeSafety and Audit keep denying.
let builder = BACnetServer::bip_builder().policy(FnPolicy::new().mutation(|_| false));Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn audit_reporters(self, profile: AuditReportersConfig) -> Self
pub fn audit_reporters(self, profile: AuditReportersConfig) -> Self
Enable the narrow target audit profile; see AuditReportersConfig.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn reinit_password(self, password: impl Into<String>) -> Self
pub fn reinit_password(self, password: impl Into<String>) -> Self
Set the password required for ReinitializeDevice requests.
Sourcepub fn on_reinitialize<F>(self, handler: F) -> Selfwhere
F: Fn(&ReinitializeContext, &mut ObjectDatabase) -> Result<(), Error> + Send + Sync + 'static,
pub fn on_reinitialize<F>(self, handler: F) -> Selfwhere
F: Fn(&ReinitializeContext, &mut ObjectDatabase) -> Result<(), Error> + Send + Sync + 'static,
Set the ReinitializeDevice handler. It must reply before restarting and
stay quick; see ReinitializeHandler.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn time_sync_policy(self, policy: TimeSyncPolicy) -> Self
pub fn time_sync_policy(self, policy: TimeSyncPolicy) -> Self
Configure opt-in inbound clock restrictions; see TimeSyncPolicy.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn dcc_disable_rate_limit(self, limit: Option<DccDisableRateLimit>) -> Self
pub fn dcc_disable_rate_limit(self, limit: Option<DccDisableRateLimit>) -> Self
Limit authorized DISABLE_INITIATION globally; None (default) disables it.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn dcc_password(self, password: impl Into<String>) -> Self
pub fn dcc_password(self, password: impl Into<String>) -> Self
Set the password required for DeviceCommunicationControl requests.
Sourcepub fn dcc_source_restriction(
self,
restriction: Option<DccSourceRestriction>,
) -> Self
pub fn dcc_source_restriction( self, restriction: Option<DccSourceRestriction>, ) -> Self
Restrict claimed DCC sources; requires explicit RequirePassword policy.
Sourcepub fn dcc_policy(self, policy: DccPolicy) -> Self
pub fn dcc_policy(self, policy: DccPolicy) -> Self
Select explicit local DCC authorization (default: deny all).
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn registered_network_port(self, oid: ObjectIdentifier) -> Self
pub fn registered_network_port(self, oid: ObjectIdentifier) -> Self
Select the built-in Network Port that represents this owned B/IP link.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn request_admission_policy(self, policy: RequestAdmissionPolicy) -> Self
pub fn request_admission_policy(self, policy: RequestAdmissionPolicy) -> Self
Set positive global and peer handler limits, validated before startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn read_property_multiple_budget(
self,
budget: ReadPropertyMultipleBudget,
) -> Self
pub fn read_property_multiple_budget( self, budget: ReadPropertyMultipleBudget, ) -> Self
Set positive per-service RPM limits, validated before transport startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn get_alarm_summary_budget(self, budget: GetAlarmSummaryBudget) -> Self
pub fn get_alarm_summary_budget(self, budget: GetAlarmSummaryBudget) -> Self
Set limits validated before transport startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn atomic_read_file_budget(self, budget: AtomicReadFileBudget) -> Self
pub fn atomic_read_file_budget(self, budget: AtomicReadFileBudget) -> Self
Set AtomicReadFile limits validated before transport startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn atomic_write_file_budget(self, budget: AtomicWriteFileBudget) -> Self
pub fn atomic_write_file_budget(self, budget: AtomicWriteFileBudget) -> Self
Set AtomicWriteFile payload limits, validated before transport startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn read_range_budget(self, budget: ReadRangeBudget) -> Self
pub fn read_range_budget(self, budget: ReadRangeBudget) -> Self
Set ReadRange page limits, validated before startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn get_event_information_budget(
self,
budget: GetEventInformationBudget,
) -> Self
pub fn get_event_information_budget( self, budget: GetEventInformationBudget, ) -> Self
Set GetEventInformation limits, validated before startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn get_enrollment_summary_budget(
self,
budget: GetEnrollmentSummaryBudget,
) -> Self
pub fn get_enrollment_summary_budget( self, budget: GetEnrollmentSummaryBudget, ) -> Self
Set GetEnrollmentSummary limits validated before transport startup.
Source§impl BipServerBuilder
impl BipServerBuilder
Sourcepub fn device(self, identity: DeviceIdentity) -> Self
pub fn device(self, identity: DeviceIdentity) -> Self
Set the one Device identity. With no supplied database, startup creates a stock Device after resolving the owned transport’s receive capacity.
Sourcepub fn database(self, db: ObjectDatabase) -> Self
pub fn database(self, db: ObjectDatabase) -> Self
Set the object database (transfers ownership).
Sourcepub fn device_binding(self, binding: DeviceBinding) -> Result<Self, Error>
pub fn device_binding(self, binding: DeviceBinding) -> Result<Self, Error>
Register one explicit unicast route for a Device recipient.
Sourcepub fn audit_notification_sink(self, sink: ObjectIdentifier) -> Self
pub fn audit_notification_sink(self, sink: ObjectIdentifier) -> Self
Select the only local Audit Log that receives authorized notifications.
Sourcepub fn enable_fault_detection(self, enabled: bool) -> Self
pub fn enable_fault_detection(self, enabled: bool) -> Self
Enable periodic fault detection / reliability evaluation.
When enabled, every object’s opt-in reliability hook runs every 10 seconds; the default hook is a no-op.
Reliability evaluation only; Event Enrollment evaluation is configured
by enable_event_enrollment.
Sourcepub fn enable_event_enrollment(self, enabled: bool) -> Self
pub fn enable_event_enrollment(self, enabled: bool) -> Self
Enable periodic Event Enrollment evaluation (default true).
Sourcepub fn event_enrollment_interval_secs(self, secs: u64) -> Self
pub fn event_enrollment_interval_secs(self, secs: u64) -> Self
Set the interval in seconds between Event Enrollment evaluation passes (default 10).
Sourcepub fn discovery_policy(self, policy: DiscoveryPolicy) -> Self
pub fn discovery_policy(self, policy: DiscoveryPolicy) -> Self
Set the discovery rate-limiting and duplicate suppression policy.
Sourcepub fn cov_policy(self, policy: CovPolicy) -> Self
pub fn cov_policy(self, policy: CovPolicy) -> Self
Set the COV quota and notification work budget policy, checked by
CovPolicy::validate before transport startup.
Sourcepub async fn build(self) -> Result<BACnetServer<BipTransport>, Error>
pub async fn build(self) -> Result<BACnetServer<BipTransport>, Error>
Build and start the server, constructing a BipTransport from the config.