-
Notifications
You must be signed in to change notification settings - Fork 689
Added if_nametoindex (and necessary module based on Cs net/if.h) #245
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Closed
Closed
Changes from all commits
Commits
Show all changes
6 commits
Select commit
Hold shift + click to select a range
f3d1030
Added if_nametoindex (and necessary module based on Cs net/if.h)
mbr 8972270
Do not use extern, but if_nametoindex from libc instead.
mbr 71c6836
Changed Error type to nix::Error.
mbr 5ef9689
Use nix::Result explicitly.
mbr 55b460b
Added note regarding naming.
mbr 2cb7878
Use function name as it is used in C.
mbr File filter
Filter by extension
Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
There are no files selected for viewing
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,34 @@ | ||
//! Network interface name resolution. | ||
//! | ||
//! Uses Linux and/or POSIX functions to resolve interface names like "eth0" | ||
//! or "socan1" into device numbers. | ||
|
||
use libc; | ||
use libc::c_uint; | ||
use std::ffi::{CString, NulError}; | ||
use ::{Result, Error}; | ||
|
||
/// Resolve an interface into a interface number. | ||
pub fn if_nametoindex(name: &str) -> Result<c_uint> { | ||
let name = match CString::new(name) { | ||
Err(e) => match e { NulError(..) => { | ||
// A NulError indicates that a '\0' was found inside the string, | ||
// making it impossible to create valid C-String. To avoid having | ||
// to create a new error type for this rather rare case, | ||
// nix::Error's invalid_argument() constructor is used. | ||
// | ||
// We match the NulError individually here to ensure to avoid | ||
// accidentally returning invalid_argument() for errors other than | ||
// NulError (which currently don't exist). | ||
return Err(Error::invalid_argument()); | ||
}}, | ||
Ok(s) => s | ||
}; | ||
|
||
let if_index; | ||
unsafe { | ||
if_index = libc::if_nametoindex(name.as_ptr()); | ||
} | ||
|
||
if if_index == 0 { Err(Error::last()) } else { Ok(if_index) } | ||
} |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,3 @@ | ||
// To avoid clashing with the keyword "if", we use "if_" as the module name. | ||
// The original header is called "net/if.h". | ||
pub mod if_; | ||
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
could you add a tiny comment explaining the name is to avoid the keyword issue? (I'm assuming that's why, anyway)