Add nix derivation
This commit is contained in:
1
.gitignore
vendored
1
.gitignore
vendored
@@ -1 +1,2 @@
|
|||||||
/target
|
/target
|
||||||
|
result
|
||||||
|
|||||||
21
default.nix
Normal file
21
default.nix
Normal file
@@ -0,0 +1,21 @@
|
|||||||
|
{ pkgs ? import <nixpkgs> { } }:
|
||||||
|
with pkgs;
|
||||||
|
let
|
||||||
|
agent_src = fetchgit {
|
||||||
|
url = "https://gitea.rixxc.de/rixxc/x25519_agent.git";
|
||||||
|
rev = "ae00fd66ece00510799cdf0397d905f2bdee2956";
|
||||||
|
hash = "sha256-vq3fNjeDCYUVJceyWCqszFDHk/GhLVhE/WeG50RoWZs=";
|
||||||
|
};
|
||||||
|
|
||||||
|
agent = callPackage "${agent_src}/default.nix" { };
|
||||||
|
in
|
||||||
|
rustPlatform.buildRustPackage {
|
||||||
|
name = "agent-harness";
|
||||||
|
src = nix-gitignore.gitignoreSource [ ] ./.;
|
||||||
|
|
||||||
|
nativeBuildInputs = [ cargo rustc ];
|
||||||
|
|
||||||
|
buildInputs = [ agent ];
|
||||||
|
|
||||||
|
cargoSha256 = "sha256-ZgwQr1goz9yPws0P1eQwhHEv2WbcJeTCLEPYOUADOtE=";
|
||||||
|
}
|
||||||
16
shell.nix
16
shell.nix
@@ -1,16 +0,0 @@
|
|||||||
{ pkgs ? import <nixpkgs> { } }:
|
|
||||||
with pkgs;
|
|
||||||
let
|
|
||||||
agent_src = fetchgit {
|
|
||||||
url = "https://gitea.rixxc.de/rixxc/x25519_agent.git";
|
|
||||||
rev = "d9b6dea879492dc5436e14ac8ea7367d641f6deb";
|
|
||||||
hash = "sha256-B7aFz5r8dNoAO829Ao6/1Wl5TqDh9xhfDds0ZF0cRqI=";
|
|
||||||
};
|
|
||||||
|
|
||||||
agent = callPackage "${agent_src}/default.nix" { };
|
|
||||||
in
|
|
||||||
pkgs.mkShell {
|
|
||||||
name = "agent-harness";
|
|
||||||
|
|
||||||
buildInputs = [ agent ];
|
|
||||||
}
|
|
||||||
26
src/main.rs
26
src/main.rs
@@ -1,21 +1,23 @@
|
|||||||
use libc::{c_int, c_void, mmap, MAP_FAILED, MAP_SHARED, PROT_READ, PROT_WRITE};
|
use libc::{
|
||||||
|
c_int, c_void, mmap, MAP_ANON, MAP_FAILED, MAP_PRIVATE, MAP_SHARED, PROT_READ, PROT_WRITE,
|
||||||
|
};
|
||||||
use std::{env, ptr};
|
use std::{env, ptr};
|
||||||
|
|
||||||
const SHARED_MEMORY_SIZE: usize = 1024;
|
const SHARED_MEMORY_SIZE: usize = 1024;
|
||||||
|
|
||||||
#[link(name = "agent")]
|
#[link(name = "agent")]
|
||||||
extern "C" {
|
extern "C" {
|
||||||
fn agent_start(shared_memory: *mut u8, sync_memory: *mut u8);
|
fn agent_start(shared_memory: *mut u8, sync_memory: *mut u8, private_mem: *mut u8);
|
||||||
}
|
}
|
||||||
|
|
||||||
fn main() {
|
fn main() {
|
||||||
let args: Vec<String> = env::args().collect();
|
let args: Vec<String> = env::args().collect();
|
||||||
|
|
||||||
let shared_fd: c_int = args[1]
|
let shared_fd: c_int = args[0]
|
||||||
.parse()
|
.parse()
|
||||||
.expect("Please provide a valid file descriptor as first argument");
|
.expect("Please provide a valid file descriptor as first argument");
|
||||||
|
|
||||||
let sync_fd: c_int = args[2]
|
let sync_fd: c_int = args[1]
|
||||||
.parse()
|
.parse()
|
||||||
.expect("Please provide a valid file descriptor as first argument");
|
.expect("Please provide a valid file descriptor as first argument");
|
||||||
|
|
||||||
@@ -43,8 +45,20 @@ fn main() {
|
|||||||
} as *mut u8;
|
} as *mut u8;
|
||||||
assert_ne!(sync_memory, MAP_FAILED as *mut u8);
|
assert_ne!(sync_memory, MAP_FAILED as *mut u8);
|
||||||
|
|
||||||
println!("Starting agent...");
|
let private_mem = unsafe {
|
||||||
|
mmap(
|
||||||
|
ptr::null_mut() as *mut c_void,
|
||||||
|
32 * 100,
|
||||||
|
PROT_READ | PROT_WRITE,
|
||||||
|
MAP_PRIVATE | MAP_ANON,
|
||||||
|
0,
|
||||||
|
0,
|
||||||
|
)
|
||||||
|
} as *mut u8;
|
||||||
|
assert_ne!(private_mem, MAP_FAILED as *mut u8);
|
||||||
|
|
||||||
|
println!("Agent: starting agent...");
|
||||||
unsafe {
|
unsafe {
|
||||||
agent_start(shared_memory, sync_memory);
|
agent_start(shared_memory, sync_memory, private_mem);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user