Skip to content
This repository has been archived by the owner on Mar 20, 2024. It is now read-only.

Commit

Permalink
Made changes to README instructions and cclient error checking.
Browse files Browse the repository at this point in the history
Signed-off-by: phansGithub <[email protected]>
  • Loading branch information
phansGithub committed Oct 4, 2023
1 parent 32ac1d3 commit 89ebed7
Show file tree
Hide file tree
Showing 2 changed files with 57 additions and 40 deletions.
50 changes: 30 additions & 20 deletions pkg/cclient/README.md
Original file line number Diff line number Diff line change
@@ -1,36 +1,46 @@
# Compiling the C Library

## Creating the .h and the .so files:
## Creating the shared library and header files:

```cmd
go build -o lib_udsclient.so -buildmode=c-shared cclient.go
```
- this creates the header and shared library files from the cclient.go file.

```go build -o lib_udsclient.so -buildmode=c-shared cclient.go```
- this creates .h and .so files from the cclient.go file.


## Creating the .h and the .a files:

```go build -o lib_udsclient.a -buildmode=c-archive ./cclient.go```
- this creates .h and .a files

## Creating the the static library and header files:

```cmd
go build -o lib_udsclient.a -buildmode=c-archive ./cclient.go
```
- this creates the shared library and header files

## Usage

After creating the .h and/or the .a and the .o files as described in the previous steps,
After creating the library and header files as described in the previous steps,
this is how to use the functions generated by cgo

``` char* GetUdsClientVersion()```
This returns the version of our handshake on your local machine/client.
```c
char* GetUdsClientVersion()
```
This returns the version of the handshake on your local machine/client.

```char* GetUdsServerVersion()```
This returns the version of our handshake on the server/host.
```c
char* GetUdsServerVersion()
```
This returns the version of the handshake on the server/host.

```int RequestXskMapFd(char* device)```
This requests an Xsk map Fd for a specifed device.
```c
int RequestXskMapFd(char* device)
```
This requests an xskmap Fd for a specified device.
```int RequestBusyPoll(int busyTimeout, int busyBudget, int fd)```
```c
int RequestBusyPoll(int busyTimeout, int busyBudget, int fd)
```
This requests a busy poll for a specific device by using it's fd, and specifying a timeout and a budget.

```void CleanUpConnection()```
```c
void CleanUpConnection()
```
After all the other functions are called, this needs to be called after all the work you need to do is done,
so that the connection to the Uds can be cleaned up.
so that the connection to the UDS can be cleaned up.
47 changes: 27 additions & 20 deletions pkg/cclient/cclient.go
Original file line number Diff line number Diff line change
Expand Up @@ -16,15 +16,15 @@ func main() {
var cleaner uds.CleanupFunc

/*
GetClientVersion is an exported version for c of goclient's GetClientVersion()
GetClientVersion is an exported version for c of the goclient GetClientVersion()
*/
//export GetUdsClientVersion
func GetUdsClientVersion() *C.char {
return C.CString(goclient.GetClientVersion())
}

/*
ServerVersion is an exported version for c of goclient's GetServerVersion()
ServerVersion is an exported version for c of the goclient GetServerVersion()
*/
//export GetUdsServerVersion
func GetUdsServerVersion() *C.char {
Expand All @@ -41,36 +41,43 @@ func GetUdsServerVersion() *C.char {
}

/*
GetXskMapFd is an exported version for c of goclient's XskMapFd()
GetXskMapFd is an exported version for c of the goclient XskMapFd()
*/
//export RequestXskMapFd
func RequestXskMapFd(device *C.char) (fd C.int) {
fdVal, function, err := goclient.RequestXSKmapFD(C.GoString(device))
fd = C.int(fdVal)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
function()
return -1
}
if device != nil {
fdVal, function, err := goclient.RequestXSKmapFD(C.GoString(device))
fd = C.int(fdVal)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
function()
return -1
}

cleaner = function
cleaner = function
return fd
}

return fd
return -1
}

/*
RequestBusyPoll is an exported version for c of goclient's RequestBusyPoll()
RequestBusyPoll is an exported version for c of the goclient RequestBusyPoll()
*/
//export RequestBusyPoll
func RequestBusyPoll(busyTimeout, busyBudget, fd C.int) C.int {
function, err := goclient.RequestBusyPoll(int(busyTimeout), int(busyBudget), int(fd))
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
function()
return -1
timeout, budget, fdInt := int(busyTimeout), int(busyBudget), int(fd)
if timeout > -1 && budget > -1 && fdInt > -1 {
function, err := goclient.RequestBusyPoll(timeout, budget, fdInt)
if err != nil {
fmt.Fprintln(os.Stderr, err.Error())
function()
return -1
}
cleaner = function
return 0
}
cleaner = function
return 0
return -1
}

/*
Expand Down

0 comments on commit 89ebed7

Please sign in to comment.