Skip to content

A wrapper for brctl(ethernet bridge administration) using rust 🦀

License

Notifications You must be signed in to change notification settings

ViniciosLugli/brctl-rs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

brctl-rs

This project is a Rust wrapper for the brctl command-line tool used for Ethernet bridge administration on Linux systems. It provides a clean, programmatic interface for creating, managing, and inspecting network bridges, allowing Rust developers to interact with brctl and related networking utilities(like ip) in a more user-friendly manner.

Features

  • Bridge Creation and Deletion: Easily create and delete network bridges with intuitive Rust functions.
  • Interface Management: Add or remove network interfaces from bridges programmatically.
  • Bridge Properties: Query and modify bridge properties, such as Spanning Tree Protocol (STP), hairpin mode, and bridge ageing time.
  • System Readiness Check: Verify system readiness by ensuring brctl and ip utilities are available and properly configured.
  • List and Inspect Bridges: Retrieve a list of all bridges on the system and inspect bridge-specific details, including connected interfaces and bridge IDs.

Dependencies / System Requirements

  • Linux: This wrapper is designed for Linux systems, as brctl is a Linux-specific utility.

    • brctl: The tool for managing Ethernet bridges, part of the bridge-utils package on most Linux distributions.
    • ip: The command used for network interface manipulation, typically provided by iproute2.

    Ensure both utilities are installed on your system for full functionality of this wrapper.

Example Usage

You can find this example on examples/basic.rs.

use brctl::{BridgeController, CommandError};

fn main() -> Result<(), CommandError> {
    // Initialize logging, if you want to see logs, set the RUST_LOG environment variable
    env_logger::init();

    // Check if the system is ready for bridge operations
    match BridgeController::check() {
        Ok((brctl_version, interfaces)) => {
            println!("brctl version: {}", brctl_version);
            println!("Available interfaces: {:?}", interfaces);
        }
        Err(e) => eprintln!("System not ready: {}", e),
    }

    // Create a new bridge
    let mybridge = BridgeController::create_bridge("mybridge")?;
    mybridge.add_interface("eth0")?;
    mybridge.add_interface("eth1")?;

    // List all bridges
    let bridges = BridgeController::list_bridges()?;
    println!("Available bridges:");
    for bridge in bridges {
        println!("  - {}", bridge);
    }

    // Retrieve bridge details
    let bridge_name = mybridge.get_name();
    println!("Bridge Name: {}", bridge_name);
    println!("Bridge ID: {}", mybridge.get_id()?);
    println!("Spanning Tree Protocol: {}", mybridge.get_stp()?);

    // Delete the bridge
    mybridge.delete()?;
    println!("Bridge deleted successfully");

    Ok(())
}

Installation

Add the following to your Cargo.toml file:

[dependencies]
brctl = "1.0.0"

now you can use the crate in your project 🦀!

License

This project is licensed under the GPL-3.0. For more information, see the LICENSE file.

Contributing

Contributions are welcome! Please submit issues or pull requests to the repository at: GitHub - ViniciosLugli/brctl-rs

Authors

About

A wrapper for brctl(ethernet bridge administration) using rust 🦀

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages