{"id":22499739,"url":"https://github.com/opiproject/godpu","last_synced_at":"2025-08-20T20:33:32.585Z","repository":{"id":59764005,"uuid":"537138657","full_name":"opiproject/godpu","owner":"opiproject","description":"Go library and cli to communicate with DPUs and IPUs","archived":false,"fork":false,"pushed_at":"2025-01-20T16:47:16.000Z","size":623,"stargazers_count":9,"open_issues_count":17,"forks_count":18,"subscribers_count":1,"default_branch":"main","last_synced_at":"2025-04-07T20:56:15.555Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"Go","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/opiproject.png","metadata":{"files":{"readme":"README.md","changelog":"CHANGELOG.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":".github/CODEOWNERS","security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2022-09-15T17:34:48.000Z","updated_at":"2025-01-20T16:45:48.000Z","dependencies_parsed_at":"2022-09-21T07:30:20.549Z","dependency_job_id":"e5193954-0643-4b54-aa1d-27294281766d","html_url":"https://github.com/opiproject/godpu","commit_stats":{"total_commits":566,"total_committers":17,"mean_commits":"33.294117647058826","dds":0.5618374558303887,"last_synced_commit":"9cf56d17e62780e148d3fe8f0d888e855a8a19ea"},"previous_names":["opiproject/goopicsi"],"tags_count":3,"template":false,"template_full_name":null,"purl":"pkg:github/opiproject/godpu","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opiproject%2Fgodpu","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opiproject%2Fgodpu/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opiproject%2Fgodpu/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opiproject%2Fgodpu/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/opiproject","download_url":"https://codeload.github.com/opiproject/godpu/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/opiproject%2Fgodpu/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":271378717,"owners_count":24749199,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","status":"online","status_checked_at":"2025-08-20T02:00:09.606Z","response_time":69,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":[],"created_at":"2024-12-06T22:15:43.489Z","updated_at":"2025-08-20T20:33:32.186Z","avatar_url":"https://github.com/opiproject.png","language":"Go","funding_links":[],"categories":[],"sub_categories":[],"readme":"# godpu\n\n[![Linters](https://github.com/opiproject/godpu/actions/workflows/linters.yml/badge.svg)](https://github.com/opiproject/godpu/actions/workflows/linters.yml)\n[![CodeQL](https://github.com/opiproject/godpu/actions/workflows/codeql.yml/badge.svg)](https://github.com/opiproject/godpu/actions/workflows/codeql.yml)\n[![OpenSSF Scorecard](https://api.securityscorecards.dev/projects/github.com/opiproject/godpu/badge)](https://securityscorecards.dev/viewer/?platform=github.com\u0026org=opiproject\u0026repo=godpu)\n[![Go](https://github.com/opiproject/godpu/actions/workflows/go.yml/badge.svg)](https://github.com/opiproject/godpu/actions/workflows/go.yml)\n[![Docker](https://github.com/opiproject/godpu/actions/workflows/docker-publish.yml/badge.svg)](https://github.com/opiproject/godpu/actions/workflows/docker-publish.yml)\n[![License](https://img.shields.io/github/license/opiproject/godpu?style=flat-square\u0026color=blue\u0026label=License)](https://github.com/opiproject/godpu/blob/master/LICENSE)\n[![codecov](https://codecov.io/gh/opiproject/godpu/branch/main/graph/badge.svg)](https://codecov.io/gh/opiproject/godpu)\n[![Go Report Card](https://goreportcard.com/badge/github.com/opiproject/godpu)](https://goreportcard.com/report/github.com/opiproject/godpu)\n[![Go Doc](https://img.shields.io/badge/godoc-reference-blue.svg)](http://godoc.org/github.com/opiproject/godpu)\n[![Pulls](https://img.shields.io/docker/pulls/opiproject/godpu.svg?logo=docker\u0026style=flat\u0026label=Pulls)](https://hub.docker.com/r/opiproject/godpu)\n[![Last Release](https://img.shields.io/github/v/release/opiproject/godpu?label=Latest\u0026style=flat-square\u0026logo=go)](https://github.com/opiproject/godpu/releases)\n[![GitHub stars](https://img.shields.io/github/stars/opiproject/godpu.svg?style=flat-square\u0026label=github%20stars)](https://github.com/opiproject/godpu)\n[![GitHub Contributors](https://img.shields.io/github/contributors/opiproject/godpu.svg?style=flat-square)](https://github.com/opiproject/godpu/graphs/contributors)\n\nGo library and cli to communicate with DPUs and IPUs.\n\n## I Want To Contribute\n\nThis project welcomes contributions and suggestions.  We are happy to have the\nCommunity involved via submission of **Issues and Pull Requests** (with\nsubstantive content  or even just fixes). We are hoping for the documents,\ntest framework, etc. to become a community process with active engagement.\nPRs can be reviewed by any number of people, and a maintainer may accept.\n\nSee [CONTRIBUTING](https://github.com/opiproject/opi/blob/main/CONTRIBUTING.md)\nand [GitHub Basic Process](https://github.com/opiproject/opi/blob/main/doc-github-rules.md)\nfor more details.\n\n## Installation\n\nThere are several ways of running this CLI.\n\n### Docker\n\n```sh\ndocker pull opiproject/godpu:\u003cversion\u003e\n```\n\nYou can specify a version like `0.1.1` or use `latest` to get the most up-to-date version.\n\nRun latest version of the CLI in a container:\n\n```sh\ndocker run --rm opiproject/godpu:latest --help\n```\n\nReplace `--help` with any `godpu` command, without `godpu` itself.\n\n### Golang\n\n```sh\ngo install -v github.com/opiproject/godpu@latest\n```\n\nor import\n\n```go\nimport (\n        \"github.com/opiproject/godpu\"\n)\n```\n\n## Tests\n\nTest your APIs even if unmerged using your private fork like this:\n\n```bash\nchmod a+w go.*\ndocker run --rm -it -v `pwd`:/app -w /app golang:alpine go mod edit -replace github.com/opiproject/opi-api@main=github.com/YOURUSERNAME/opi-api@main\ndocker run --rm -it -v `pwd`:/app -w /app golang:alpine go get -u github.com/YOURUSERNAME/opi-api/storage/v1alpha1/gen/go@a98ca449468a\ndocker run --rm -it -v `pwd`:/app -w /app golang:alpine go mod tidy\n```\n\nGenerate mocks like this:\n\n```bash\ngo install github.com/vektra/mockery/v2@latest\nmake mock-generate\n```\n\n## CLI\n\n### Storage\n\n```bash\nalias dpu=\"docker run --rm --network host ghcr.io/opiproject/godpu:main\"\n\n# connect to remote nvme/tcp controller\nnvmf0=$(dpu storage create backend nvme controller --id nvmf0 --multipath disable)\npath0=$(dpu storage create backend nvme path tcp --controller \"$nvmf0\" --id path0 --ip \"11.11.11.2\" --port 4444 --nqn nqn.2016-06.io.spdk:cnode1 --hostnqn nqn.2014-08.org.nvmexpress:uuid:feb98abe-d51f-40c8-b348-2753f3571d3c)\ndpu storage get backend nvme controller --name $nvmf0\ndpu storage get backend nvme path --name $path0\n\n# connect to local nvme/pcie ssd controller\nnvmf1=$(dpu storage create backend nvme controller --id nvmf1 --multipath disable)\npath1=$(dpu storage create backend nvme path pcie --controller \"$nvmf1\" --id path1 --bdf \"0000:40:00.0\")\ndpu storage get backend nvme controller --name $nvmf1\ndpu storage get backend nvme path --name $path1\n\n# expose volume over nvme/tcp controller\nss0=$(dpu storage create frontend nvme subsystem --id subsys0 --nqn \"nqn.2022-09.io.spdk:opitest0\")\nns0=$(dpu storage create frontend nvme namespace --id namespace0 --volume \"Malloc0\" --subsystem \"$ss0\")\nctrl0=$(dpu storage create frontend nvme controller tcp --id ctrl0 --ip \"127.0.0.1\" --port 4420 --subsystem \"$ss0\")\n\n# expose volume over emulated nvme/pcie controller\nss1=$(dpu storage create frontend nvme subsystem --id subsys1 --nqn \"nqn.2022-09.io.spdk:opitest1\")\nns1=$(dpu storage create frontend nvme namespace --id namespace1 --volume \"Malloc1\" --subsystem \"$ss1\")\nctrl1=$(dpu storage create frontend nvme controller pcie --id ctrl1 --port 0 --pf 0 --vf 0 --subsystem \"$ss1\")\n\n# delete emulated nvme/pcie controller\ndpu storage delete frontend nvme controller --name \"$ctrl1\"\ndpu storage delete frontend nvme namespace --name \"$ns1\"\ndpu storage delete frontend nvme subsystem --name \"$ss1\"\n\n# delete nvme/tcp controller\ndpu storage delete frontend nvme controller --name \"$ctrl0\"\ndpu storage delete frontend nvme namespace --name \"$ns0\"\ndpu storage delete frontend nvme subsystem --name \"$ss0\"\n\n# disconnect from local nvme/pcie ssd controller\ndpu storage delete backend nvme path --name \"$path1\"\ndpu storage delete backend nvme controller --name \"$nvmf1\"\n\n# disconnect from remote nvme/tcp controller\ndpu storage delete backend nvme path --name \"$path0\"\ndpu storage delete backend nvme controller --name \"$nvmf0\"\n```\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopiproject%2Fgodpu","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fopiproject%2Fgodpu","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fopiproject%2Fgodpu/lists"}