Upgrade syzkaller to a60cb4cd840ce786236a00480e8bb1025e0c5fef

Exempt-From-Owner-Approval: upgrade library
Test: None
Change-Id: I7d85b505f661ff928e1eb24a12c4dd9892e9e364
diff --git a/.gitignore b/.gitignore
index 018a6d6..34ddd10 100644
--- a/.gitignore
+++ b/.gitignore
@@ -4,3 +4,6 @@
 workdir*
 
 bin/
+
+# jetbrains goland
+.idea
diff --git a/.travis.yml b/.travis.yml
index 7484fb7..cf4c747 100644
--- a/.travis.yml
+++ b/.travis.yml
@@ -1,6 +1,7 @@
 language: go
 dist: xenial
-
+services:
+  - docker
 go:
   - "1.11"
   - "1.12"
@@ -34,8 +35,16 @@
 
 jobs:
   include:
-    - stage: fuzzit.dev
-      if: branch = master AND type IN (push)
+    - stage: fuzzit.dev (regression)
+      if: branch = master AND type IN (pull_request)
       go: 1.12.x
       script:
-        - ./fuzzit.sh
+        - ./fuzzit.sh regression
+
+    - stage: fuzzit.dev (fuzzing)
+      if: branch = master AND type IN (push)
+      go: 1.12.x
+      env:
+        secure: "TEXvLRUk/cmNwksHLTihVVyBWoU76EhAXkCCdLbn1FtfqCOzzMnQm02oUYcufLrVWIuVDUEUa9Tq+BrS2LGN2oTJEzk8bdQxeiztiRwbPocRLY3y3BNWWk89Vvu/eC/nPPoeRKZ7k3VZDbAk/+cPyXNMVaxBO7rwMqrne90txgTunX9V7U9Rr7b2phECBEF+riWtO3kWumZZG9qGq6NRmEcsoMOHgF2WGmxeAkAaU8xKdYOYbbUIns3cSf+bGWnFKOxSDkVDOOyKxdAc6OufejbGU4rjspty6ueXaoL69Rq5+7GOUflqLTMO8WUhpc65DPY3+9G2iH1p7U4v10Vk2V6qbQw83DDeucjSH23zIbNkjjYHSV5IMNwAMcEG5fwANfmnmQeVQCJJkwRBZufD1T+CLf9gqVldLG9qUGPI+ySli2J0oVAQ1rvMhKgR44Ipb3FQm0XBYhYXa3i08ojVXEtG8PNGHgrmOJnhUzC/BA+m9QKncxqMuISsBdlRnuU37DD0HeHZ6NTWvGy7gv2mhnCHc7AWuveBsc3XDvSfK8U3tB9LxS2OdRKWQdhnJBKowjAZ55lvTP0AgagQL+mPBQ7qJ2N8OT/oDRtN6tkY+DIEi8JTie0XOitNbY9AaF4hRFcixpesthvTEdOzx//mURXZXiPYQwyrjf9u1dwEpfA="
+      script:
+        - ./fuzzit.sh fuzzing
diff --git a/METADATA b/METADATA
index 7aa25e0..d5b6d76 100644
--- a/METADATA
+++ b/METADATA
@@ -5,10 +5,10 @@
     type: GIT
     value: "https://github.com/google/syzkaller"
   }
-  version: "e6ebef88ac567c3be8461923ea4f0bc9b9d5ad08"
+  version: "a60cb4cd840ce786236a00480e8bb1025e0c5fef"
   last_upgrade_date {
     year: 2019
-    month: 8
-    day: 7
+    month: 9
+    day: 6
   }
 }
diff --git a/Makefile b/Makefile
index 2453a37..6525745 100644
--- a/Makefile
+++ b/Makefile
@@ -44,12 +44,6 @@
 TARGETGOOS := $(TARGETOS)
 TARGETGOARCH := $(TARGETVMARCH)
 
-ifeq ("$(TARGETOS)", "fuchsia")
-# SOURCEDIR should point to fuchsia checkout.
-export FX_SRC_PATH=$(SOURCEDIR)
-	GO = "tools/fuchsia/go"
-endif
-
 GITREV=$(shell git rev-parse HEAD)
 ifeq ("$(shell git diff --shortstat)", "")
 	REV=$(GITREV)
@@ -81,6 +75,11 @@
 	TARGETGOARCH := $(HOSTARCH)
 endif
 
+ifeq ("$(TARGETOS)", "fuchsia")
+	TARGETGOOS := $(HOSTOS)
+	TARGETGOARCH := $(HOSTARCH)
+endif
+
 ifeq ("$(TARGETOS)", "trusty")
 	TARGETGOOS := $(HOSTOS)
 	TARGETGOARCH := $(HOSTARCH)
diff --git a/README.md b/README.md
index 8eef8b8..d022bf5 100644
--- a/README.md
+++ b/README.md
@@ -1,6 +1,7 @@
 # syzkaller - kernel fuzzer
 
 [![Build Status](https://travis-ci.org/google/syzkaller.svg?branch=master)](https://travis-ci.org/google/syzkaller)
+[![fuzzit](https://app.fuzzit.dev/badge?org_id=syzkaller=master)](https://fuzzit.dev)
 [![Go Report Card](https://goreportcard.com/badge/github.com/google/syzkaller)](https://goreportcard.com/report/github.com/google/syzkaller)
 [![Coverage Status](https://codecov.io/gh/google/syzkaller/graph/badge.svg)](https://codecov.io/gh/google/syzkaller)
 [![GoDoc](https://godoc.org/github.com/google/syzkaller?status.svg)](https://godoc.org/github.com/google/syzkaller)
diff --git a/dashboard/app/bisect_test.go b/dashboard/app/bisect_test.go
index 3650d65..7b4f63b 100644
--- a/dashboard/app/bisect_test.go
+++ b/dashboard/app/bisect_test.go
@@ -363,8 +363,55 @@
 	done.Build.ID = jobID
 	c.expectOK(c.client2.JobDone(done))
 
-	// TODO: Reporting for BisectFix results not implemented
-	// c.pollEmailBug()
+	_, extBugID, err = email.RemoveAddrContext(msg4.Sender)
+	c.expectOK(err)
+	_, dbCrash, _ = c.loadBug(extBugID)
+	reproSyzLink = externalLink(c.ctx, textReproSyz, dbCrash.ReproSyz)
+	reproCLink = externalLink(c.ctx, textReproC, dbCrash.ReproC)
+	dbJob, dbBuild, dbJobCrash = c.loadJob(jobID)
+	kernelConfigLink = externalLink(c.ctx, textKernelConfig, dbBuild.KernelConfig)
+	bisectCrashReportLink = externalLink(c.ctx, textCrashReport, dbJob.CrashReport)
+	bisectCrashLogLink = externalLink(c.ctx, textCrashLog, dbJob.CrashLog)
+	bisectLogLink = externalLink(c.ctx, textLog, dbJob.Log)
+	crashLogLink = externalLink(c.ctx, textCrashLog, dbJobCrash.Log)
+
+	{
+		msg := c.pollEmailBug()
+		// Not mailed to commit author/cc because !MailMaintainers.
+		// c.expectEQ(msg.To, []string{"test@syzkaller.com"})
+		c.expectEQ(msg.Subject, crash4.Title)
+		c.expectEQ(len(msg.Attachments), 0)
+		c.expectEQ(msg.Body, fmt.Sprintf(`syzbot suspects this bug was fixed by commit:
+
+commit 46e65cb4a0448942ec316b24d60446bbd5cc7827
+Author: Author Kernelov <author@kernel.org>
+Date:   Wed Feb 9 04:05:06 2000 +0000
+
+    kernel: add a fix
+
+bisection log:  %[2]v
+start commit:   11111111 kernel_commit_title1
+git tree:       repo1 branch1
+final crash:    %[3]v
+console output: %[4]v
+kernel config:  %[5]v
+dashboard link: https://testapp.appspot.com/bug?extid=%[1]v
+syz repro:      %[6]v
+
+If the result looks correct, please mark the bug fixed by replying with:
+
+#syz fix: kernel: add a fix
+
+For information about bisection process see: https://goo.gl/tpsmEJ#bisection
+`, extBugID, bisectLogLink, bisectCrashReportLink, bisectCrashLogLink, kernelConfigLink, reproSyzLink, reproCLink))
+
+		syzRepro := []byte(fmt.Sprintf("%s#%s\n%s", syzReproPrefix, crash4.ReproOpts, crash4.ReproSyz))
+		c.checkURLContents(bisectLogLink, []byte("bisectfix log 4"))
+		c.checkURLContents(bisectCrashReportLink, []byte("bisectfix crash report 4"))
+		c.checkURLContents(bisectCrashLogLink, []byte("bisectfix crash log 4"))
+		c.checkURLContents(kernelConfigLink, []byte("config1"))
+		c.checkURLContents(reproSyzLink, syzRepro)
+	}
 
 	// No more bisection jobs.
 	pollResp = c.client2.pollJobs(build.Manager)
@@ -803,6 +850,8 @@
 		},
 	}
 	c.expectOK(c.client2.JobDone(done))
+	msg := c.client2.pollEmailBug()
+	c.expectTrue(strings.Contains(msg.Body, "syzbot suspects this bug was fixed by commit:"))
 
 	// Fetch bug details
 	var bugs []*Bug
@@ -819,3 +868,105 @@
 	c.expectTrue(bytes.Contains(content, []byte("Bisection: fixed by")))
 	c.expectTrue(bytes.Contains(content, []byte("kernel: add a fix")))
 }
+
+// Test that bisection status shows up on main page
+func TestBugBisectionStatus(t *testing.T) {
+	c := NewCtx(t)
+	defer c.Close()
+
+	// Upload a crash report
+	build := testBuild(1)
+	c.client2.UploadBuild(build)
+	crash := testCrashWithRepro(build, 1)
+	c.client2.ReportCrash(crash)
+	c.client2.pollEmailBug()
+
+	// Receive the JobBisectCause and send cause information
+	resp := c.client2.pollJobs(build.Manager)
+	c.client2.expectNE(resp.ID, "")
+	c.client2.expectEQ(resp.Type, dashapi.JobBisectCause)
+	jobID := resp.ID
+	done := &dashapi.JobDoneReq{
+		ID:          jobID,
+		Build:       *build,
+		Log:         []byte("bisectfix log 4"),
+		CrashTitle:  "bisectfix crash title 4",
+		CrashLog:    []byte("bisectfix crash log 4"),
+		CrashReport: []byte("bisectfix crash report 4"),
+		Commits: []dashapi.Commit{
+			{
+				Hash:       "36e65cb4a0448942ec316b24d60446bbd5cc7827",
+				Title:      "kernel: add a bug",
+				Author:     "author@kernel.org",
+				AuthorName: "Author Kernelov",
+				CC: []string{
+					"reviewer1@kernel.org", "\"Reviewer2\" <reviewer2@kernel.org>",
+					// These must be filtered out:
+					"syzbot@testapp.appspotmail.com",
+					"syzbot+1234@testapp.appspotmail.com",
+					"\"syzbot\" <syzbot+1234@testapp.appspotmail.com>",
+				},
+				Date: time.Date(2000, 2, 9, 4, 5, 6, 7, time.UTC),
+			},
+		},
+	}
+	c.expectOK(c.client2.JobDone(done))
+
+	// Fetch bug, namespace details
+	var bugs []*Bug
+	_, err := db.NewQuery("Bug").GetAll(c.ctx, &bugs)
+	c.expectEQ(err, nil)
+	c.expectEQ(len(bugs), 1)
+	url := fmt.Sprintf("/%v", bugs[0].Namespace)
+	content, err := c.httpRequest("GET", url, "", AccessAdmin)
+	c.expectEQ(err, nil)
+	c.expectTrue(bytes.Contains(content, []byte("cause")))
+
+	// Advance time by 30 days and read out any notification emails
+	{
+		c.advanceTime(30 * 24 * time.Hour)
+		msg := c.client2.pollEmailBug()
+		c.expectTrue(strings.Contains(msg.Body, "syzbot has bisected this bug to:"))
+		msg = c.client2.pollEmailBug()
+		c.expectTrue(strings.Contains(msg.Body, "Sending this report upstream."))
+		msg = c.client2.pollEmailBug()
+		c.expectTrue(strings.Contains(msg.Body, "syzbot found the following crash"))
+	}
+
+	// Receive a JobBisectfix and send fix information.
+	resp = c.client2.pollJobs(build.Manager)
+	c.client2.expectNE(resp.ID, "")
+	c.client2.expectEQ(resp.Type, dashapi.JobBisectFix)
+	jobID = resp.ID
+	done = &dashapi.JobDoneReq{
+		ID:          jobID,
+		Build:       *build,
+		Log:         []byte("bisectfix log 4"),
+		CrashTitle:  "bisectfix crash title 4",
+		CrashLog:    []byte("bisectfix crash log 4"),
+		CrashReport: []byte("bisectfix crash report 4"),
+		Commits: []dashapi.Commit{
+			{
+				Hash:       "46e65cb4a0448942ec316b24d60446bbd5cc7827",
+				Title:      "kernel: add a fix",
+				Author:     "author@kernel.org",
+				AuthorName: "Author Kernelov",
+				CC: []string{
+					"reviewer1@kernel.org", "\"Reviewer2\" <reviewer2@kernel.org>",
+					// These must be filtered out:
+					"syzbot@testapp.appspotmail.com",
+					"syzbot+1234@testapp.appspotmail.com",
+					"\"syzbot\" <syzbot+1234@testapp.appspotmail.com>",
+				},
+				Date: time.Date(2000, 2, 9, 4, 5, 6, 7, time.UTC),
+			},
+		},
+	}
+	c.expectOK(c.client2.JobDone(done))
+	content, err = c.httpRequest("GET", url, "", AccessAdmin)
+	c.expectEQ(err, nil)
+	c.expectTrue(bytes.Contains(content, []byte("cause+fix")))
+
+	msg := c.client2.pollEmailBug()
+	c.expectTrue(strings.Contains(msg.Body, "syzbot suspects this bug was fixed by commit:"))
+}
diff --git a/dashboard/app/bug.html b/dashboard/app/bug.html
index 2efb75a..829c0b1 100644
--- a/dashboard/app/bug.html
+++ b/dashboard/app/bug.html
@@ -25,75 +25,8 @@
 	{{end}}
 	First crash: {{formatLateness $.Now $.Bug.FirstTime}}, last: {{formatLateness $.Now $.Bug.LastTime}}<br>
 
-	{{with $bisect := .BisectCause}}<br>
-		{{if $bisect.ErrorLink}}
-			<b>Bisection: {{link $bisect.ErrorLink "error"}}
-			({{link $bisect.LogLink "bisect log"}})</b><br>
-		{{else if $bisect.Commit}}{{with $com := $bisect.Commit}}
-			<b>Bisection: introduced by
-			({{link $bisect.LogLink "bisect log"}}):</b><br>
-			<br><span class="mono">
-			commit {{$com.Hash}}<br>
-			Author: {{$com.Author}}<br>
-			Date:   {{formatKernelTime $com.Date}}<br>
-			<br>
-			&nbsp;&nbsp;{{$com.Title}}<br>
-			</span><br>
-		{{end}}{{else if $bisect.Commits}}{{with $bisect.Commits}}
-			<b>Bisection: the first bad commit could be any of
-			({{link $bisect.LogLink "bisect log"}}):</b><br>
-			<br><span class="mono">
-			{{range $com := $bisect.Commits}}
-				&nbsp;&nbsp;{{formatTagHash $com.Hash}} {{$com.Title}}<br>
-			{{end}}
-			</span><br>
-		{{end}}{{else}}
-			<b>Bisection: the bug happens on the oldest tested release
-			({{link $bisect.LogLink "bisect log"}})</b><br>
-		{{end}}
-		Tree: <span title="{{$bisect.Manager}}">{{$bisect.KernelAlias}}</span><br>
-		{{if $bisect.CrashLogLink}}
-			Crash: {{link $bisect.CrashReportLink $bisect.CrashTitle}} ({{link $bisect.CrashLogLink "log"}})<br>
-		{{end}}
-		Repro: {{optlink $bisect.Crash.ReproCLink "C"}}
-			{{optlink $bisect.Crash.ReproSyzLink "syz"}}
-			{{optlink $bisect.Crash.KernelConfigLink ".config"}}<br>
-	{{end}}
-
-	{{with $bisect := .BisectFix}}<br>
-		{{if $bisect.ErrorLink}}
-			<b>Bisection: {{link $bisect.ErrorLink "error"}}
-			({{link $bisect.LogLink "bisect log"}})</b><br>
-		{{else if $bisect.Commit}}{{with $com := $bisect.Commit}}
-			<b>Bisection: fixed by
-			({{link $bisect.LogLink "bisect log"}}):</b><br>
-			<br><span class="mono">
-			commit {{$com.Hash}}<br>
-			Author: {{$com.Author}}<br>
-			Date:   {{formatKernelTime $com.Date}}<br>
-			<br>
-			&nbsp;&nbsp;{{$com.Title}}<br>
-			</span><br>
-		{{end}}{{else if $bisect.Commits}}{{with $bisect.Commits}}
-			<b>Bisection: the fix commit could be any of
-			({{link $bisect.LogLink "bisect log"}}):</b><br>
-			<br><span class="mono">
-			{{range $com := $bisect.Commits}}
-				&nbsp;&nbsp;{{formatTagHash $com.Hash}} {{$com.Title}}<br>
-			{{end}}
-			</span><br>
-		{{end}}{{else}}
-			<b>Bisection: the bug occurs on the newest tested release
-			({{link $bisect.LogLink "bisect log"}})</b><br>
-		{{end}}
-		Tree: <span title="{{$bisect.Manager}}">{{$bisect.KernelAlias}}</span><br>
-		{{if $bisect.CrashLogLink}}
-			Crash: {{link $bisect.CrashReportLink $bisect.CrashTitle}} ({{link $bisect.CrashLogLink "log"}})<br>
-		{{end}}
-		Repro: {{optlink $bisect.Crash.ReproCLink "C"}}
-			{{optlink $bisect.Crash.ReproSyzLink "syz"}}
-			{{optlink $bisect.Crash.KernelConfigLink ".config"}}<br>
-	{{end}}
+	{{template "bisect_results" .BisectCause}}
+	{{template "bisect_results" .BisectFix}}
 
 	{{template "bug_list" .DupOf}}
 	{{template "bug_list" .Dups}}
diff --git a/dashboard/app/entities.go b/dashboard/app/entities.go
index c6d26c4..0d368a9 100644
--- a/dashboard/app/entities.go
+++ b/dashboard/app/entities.go
@@ -89,7 +89,7 @@
 	Reporting      []BugReporting
 	Commits        []string // titles of fixing commmits
 	CommitInfo     []Commit // additional info for commits (for historical reasons parallel array to Commits)
-	HappenedOn     []string `datastore:",noindex"` // list of managers
+	HappenedOn     []string // list of managers
 	PatchedOn      []string `datastore:",noindex"` // list of managers
 	UNCC           []string // don't CC these emails on this bug
 }
diff --git a/dashboard/app/index.yaml b/dashboard/app/index.yaml
index 3b38b3f..7100bce 100644
--- a/dashboard/app/index.yaml
+++ b/dashboard/app/index.yaml
@@ -18,6 +18,17 @@
 - kind: Bug
   properties:
   - name: Namespace
+  - name: HappenedOn
+
+- kind: Bug
+  properties:
+  - name: Namespace
+  - name: Status
+  - name: HappenedOn
+
+- kind: Bug
+  properties:
+  - name: Namespace
   - name: Title
   - name: Seq
     direction: desc
diff --git a/dashboard/app/jobs.go b/dashboard/app/jobs.go
index 9f8dab5..9fadcb6 100644
--- a/dashboard/app/jobs.go
+++ b/dashboard/app/jobs.go
@@ -507,6 +507,9 @@
 			} else {
 				bug.BisectFix = result
 			}
+			// If the crash still occurs on HEAD, update the bug's LastTime so that it will be
+			// retried after 30 days.
+			crashesOnHead(c, bug, job, req, now)
 			if _, err := db.Put(c, bugKey, bug); err != nil {
 				return fmt.Errorf("failed to put bug: %v", err)
 			}
@@ -536,6 +539,14 @@
 	return db.RunInTransaction(c, tx, &db.TransactionOptions{XG: true, Attempts: 30})
 }
 
+func crashesOnHead(c context.Context, bug *Bug, job *Job, req *dashapi.JobDoneReq, now time.Time) {
+	if job.Type != JobBisectFix || req.Error != nil || len(req.Commits) != 0 || len(req.CrashLog) == 0 {
+		return
+	}
+	bug.BisectFix = BisectNot
+	bug.LastTime = now
+}
+
 func pollCompletedJobs(c context.Context, typ string) ([]*dashapi.BugReport, error) {
 	var jobs []*Job
 	keys, err := db.NewQuery("Job").
@@ -551,18 +562,25 @@
 			log.Criticalf(c, "no reporting for job %v", extJobID(keys[i]))
 			continue
 		}
-		// TODO: this is temporary and will be removed once support for sending
-		// JobBisectFix result emails is implemented.
-		if job.Type == JobBisectFix {
-			continue
-		}
 		reporting := config.Namespaces[job.Namespace].ReportingByName(job.Reporting)
 		if reporting.Config.Type() != typ {
 			continue
 		}
+		// TODO: reporting fix bisection is disabled until issue #1371 is resolved.
+		if !appengine.IsDevAppServer() && job.Type == JobBisectFix {
+			continue
+		}
+		// TODO: fix bisection results are only supported for email at the moment.
+		if !appengine.IsDevAppServer() && job.Type == JobBisectFix && typ != emailType {
+			continue
+		}
 		// TODO: this is temporal for gradual bisection rollout.
-		// Notify only about successful bisection for now.
-		if !appengine.IsDevAppServer() && job.Type != JobTestPatch && len(job.Commits) != 1 {
+		// Notify only about successful cause bisection for now.
+		if !appengine.IsDevAppServer() && job.Type == JobBisectCause && len(job.Commits) != 1 {
+			continue
+		}
+		// If BisectFix results in a crash on HEAD, no notification is sent out.
+		if job.Type == JobBisectFix && len(job.Commits) != 1 {
 			continue
 		}
 		rep, err := createBugReportForJob(c, job, keys[i], reporting.Config)
@@ -675,6 +693,7 @@
 		LogLink:         externalLink(c, textLog, job.Log),
 		CrashLogLink:    externalLink(c, textCrashLog, job.CrashLog),
 		CrashReportLink: externalLink(c, textCrashReport, job.CrashReport),
+		Fix:             job.Type == JobBisectFix,
 	}
 	for _, com := range job.Commits {
 		bisect.Commits = append(bisect.Commits, &dashapi.Commit{
diff --git a/dashboard/app/jobs_test.go b/dashboard/app/jobs_test.go
index 6a782ea..d52f93b 100644
--- a/dashboard/app/jobs_test.go
+++ b/dashboard/app/jobs_test.go
@@ -141,10 +141,11 @@
 git tree:       repo1 branch1
 console output: %[3]v
 kernel config:  %[2]v
+dashboard link: https://testapp.appspot.com/bug?extid=%[4]v
 compiler:       compiler1
 patch:          %[1]v
 
-`, patchLink, kernelConfigLink, logLink))
+`, patchLink, kernelConfigLink, logLink, extBugID))
 		c.checkURLContents(patchLink, []byte(patch))
 		c.checkURLContents(kernelConfigLink, build.KernelConfig)
 		c.checkURLContents(logLink, jobDoneReq.CrashLog)
@@ -178,10 +179,11 @@
 commit:         11111111 kernel_commit_title1
 git tree:       repo1 branch1
 kernel config:  %[2]v
+dashboard link: https://testapp.appspot.com/bug?extid=%[3]v
 compiler:       compiler1
 patch:          %[1]v
 
-`, patchLink, kernelConfigLink))
+`, patchLink, kernelConfigLink, extBugID))
 		c.checkURLContents(patchLink, []byte(patch))
 		c.checkURLContents(kernelConfigLink, build.KernelConfig)
 	}
@@ -219,10 +221,11 @@
 commit:         11111111 kernel_commit_title1
 git tree:       repo1 branch1
 kernel config:  %[4]v
+dashboard link: https://testapp.appspot.com/bug?extid=%[5]v
 compiler:       compiler1
 patch:          %[3]v
 
-`, truncatedError, errorLink, patchLink, kernelConfigLink))
+`, truncatedError, errorLink, patchLink, kernelConfigLink, extBugID))
 		c.checkURLContents(patchLink, []byte(patch))
 		c.checkURLContents(errorLink, jobDoneReq.Error)
 		c.checkURLContents(kernelConfigLink, build.KernelConfig)
@@ -253,6 +256,7 @@
 commit:         11111111 kernel_commit_title1
 git tree:       repo1 branch1
 kernel config:  %[3]v
+dashboard link: https://testapp.appspot.com/bug?extid=%[1]v
 compiler:       compiler1
 patch:          %[2]v
 
@@ -311,6 +315,7 @@
 commit:         5e6a2eea kernel_commit_title2
 git tree:       git://mygit.com/git.git
 kernel config:  %[2]v
+dashboard link: https://testapp.appspot.com/bug?extid=%[1]v
 compiler:       compiler2
 
 Note: testing is done by a robot and is best-effort only.
@@ -400,3 +405,67 @@
 	}
 	c.client2.expectOK(c.client2.JobDone(done))
 }
+
+// Test that JobBisectFix jobs are re-tried if crash occurs on ToT
+func TestBisectFixRetry(t *testing.T) {
+	c := NewCtx(t)
+	defer c.Close()
+
+	// Upload a crash report
+	build := testBuild(1)
+	c.client2.UploadBuild(build)
+	crash := testCrashWithRepro(build, 1)
+	c.client2.ReportCrash(crash)
+	c.client2.pollEmailBug()
+
+	// Receive the JobBisectCause
+	resp := c.client2.pollJobs(build.Manager)
+	c.client2.expectNE(resp.ID, "")
+	c.client2.expectEQ(resp.Type, dashapi.JobBisectCause)
+	done := &dashapi.JobDoneReq{
+		ID:    resp.ID,
+		Error: []byte("testBisectFixRetry:JobBisectCause"),
+	}
+	c.client2.expectOK(c.client2.JobDone(done))
+
+	// Advance time by 30 days and read out any notification emails
+	{
+		c.advanceTime(30 * 24 * time.Hour)
+		msg := c.client2.pollEmailBug()
+		c.expectEQ(msg.Subject, "title1")
+		c.expectTrue(strings.Contains(msg.Body, "Sending this report upstream."))
+
+		msg = c.client2.pollEmailBug()
+		c.expectEQ(msg.Subject, "title1")
+		c.expectTrue(strings.Contains(msg.Body, "syzbot found the following crash"))
+	}
+
+	// Ensure that we get a JobBisectFix. We send back a crashlog, no error, no commits
+	resp = c.client2.pollJobs(build.Manager)
+	c.client2.expectNE(resp.ID, "")
+	c.client2.expectEQ(resp.Type, dashapi.JobBisectFix)
+	done = &dashapi.JobDoneReq{
+		Build: dashapi.Build{
+			ID: "build1",
+		},
+		ID:          resp.ID,
+		CrashLog:    []byte("this is a crashlog"),
+		CrashReport: []byte("this is a crashreport"),
+	}
+	c.client2.expectOK(c.client2.JobDone(done))
+
+	// Advance time by 30 days. No notification emails
+	{
+		c.advanceTime(30 * 24 * time.Hour)
+	}
+
+	// Ensure that we get a JobBisectFix retry
+	resp = c.client2.pollJobs(build.Manager)
+	c.client2.expectNE(resp.ID, "")
+	c.client2.expectEQ(resp.Type, dashapi.JobBisectFix)
+	done = &dashapi.JobDoneReq{
+		ID:    resp.ID,
+		Error: []byte("testBisectFixRetry:JobBisectFix"),
+	}
+	c.client2.expectOK(c.client2.JobDone(done))
+}
diff --git a/dashboard/app/mail_bisect_result.txt b/dashboard/app/mail_bisect_result.txt
index 0e5d927..8c89344 100644
--- a/dashboard/app/mail_bisect_result.txt
+++ b/dashboard/app/mail_bisect_result.txt
@@ -1,27 +1,33 @@
-{{if .BisectCause.Commit}}syzbot has bisected this bug to:
+{{with $br := .}}{{with $bisect := selectBisect .}}{{if $bisect.Commit}}{{if $bisect.Fix}}syzbot suspects this bug was fixed by commit:
+{{else}}syzbot has bisected this bug to:
+{{end}}
+commit {{$bisect.Commit.Hash}}
+Author: {{$bisect.Commit.AuthorName}} <{{$bisect.Commit.Author}}>
+Date:   {{formatKernelTime $bisect.Commit.Date}}
 
-commit {{.BisectCause.Commit.Hash}}
-Author: {{.BisectCause.Commit.AuthorName}} <{{.BisectCause.Commit.Author}}>
-Date:   {{formatKernelTime .BisectCause.Commit.Date}}
-
-    {{.BisectCause.Commit.Title}}
-{{else if .BisectCause.Commits}}Bisection is inconclusive: the first bad commit could be any of:
-{{range $com := .BisectCause.Commits}}
+    {{$bisect.Commit.Title}}
+{{else if $bisect.Commits}}Bisection is inconclusive: the {{if $bisect.Fix}}fix{{else}}first bad{{end}} commit could be any of:
+{{range $com := $bisect.Commits}}
 {{formatShortHash $com.Hash}} {{$com.Title}}{{end}}
-{{else}}Bisection is inconclusive: the bug happens on the oldest tested release.
+{{else}}Bisection is inconclusive: the bug happens on the {{if $bisect.Fix}}latest{{else}}oldest{{end}} tested release.
 {{end}}
-bisection log:  {{.BisectCause.LogLink}}
-start commit:   {{formatShortHash .KernelCommit}} {{formatCommitTableTitle .KernelCommitTitle}}
-git tree:       {{.KernelRepoAlias}}
-{{if .BisectCause.CrashReportLink}}final crash:    {{.BisectCause.CrashReportLink}}
-{{end}}{{if .BisectCause.CrashLogLink}}console output: {{.BisectCause.CrashLogLink}}
-{{end}}{{if .KernelConfigLink}}kernel config:  {{.KernelConfigLink}}
-{{end}}dashboard link: {{.Link}}
-{{if .UserSpaceArch}}userspace arch: {{.UserSpaceArch}}
-{{end}}{{if .ReproSyzLink}}syz repro:      {{.ReproSyzLink}}
-{{end}}{{if .ReproCLink}}C reproducer:   {{.ReproCLink}}
-{{end}}{{if .BisectCause.Commit}}
-Reported-by: {{.CreditEmail}}
-Fixes: {{formatTagHash .BisectCause.Commit.Hash}} ("{{.BisectCause.Commit.Title}}")
-{{end}}
+bisection log:  {{$bisect.LogLink}}
+start commit:   {{formatShortHash $br.KernelCommit}} {{formatCommitTableTitle $br.KernelCommitTitle}}
+git tree:       {{$br.KernelRepoAlias}}
+{{if $bisect.CrashReportLink}}final crash:    {{$bisect.CrashReportLink}}
+{{end}}{{if $bisect.CrashLogLink}}console output: {{$bisect.CrashLogLink}}
+{{end}}{{if $br.KernelConfigLink}}kernel config:  {{$br.KernelConfigLink}}
+{{end}}dashboard link: {{$br.Link}}
+{{if $br.UserSpaceArch}}userspace arch: {{$br.UserSpaceArch}}
+{{end}}{{if $br.ReproSyzLink}}syz repro:      {{$br.ReproSyzLink}}
+{{end}}{{if $br.ReproCLink}}C reproducer:   {{$br.ReproCLink}}
+{{end}}{{if $bisect.Fix}}
+If the result looks correct, please mark the bug fixed by replying with:
+
+#syz fix: {{$bisect.Commit.Title}}
+{{else}}{{if $bisect.Commit}}
+Reported-by: {{$br.CreditEmail}}
+Fixes: {{formatTagHash $bisect.Commit.Hash}} ("{{$bisect.Commit.Title}}")
+{{end}}{{end}}
 For information about bisection process see: https://goo.gl/tpsmEJ#bisection
+{{end}}{{end}}
\ No newline at end of file
diff --git a/dashboard/app/mail_test_result.txt b/dashboard/app/mail_test_result.txt
index c58328d..43f0224 100644
--- a/dashboard/app/mail_test_result.txt
+++ b/dashboard/app/mail_test_result.txt
@@ -23,7 +23,8 @@
 git tree:       {{.KernelRepoAlias}}
 {{if .LogLink}}console output: {{.LogLink}}
 {{end}}{{if .KernelConfigLink}}kernel config:  {{.KernelConfigLink}}
-{{end}}compiler:       {{.CompilerID}}
+{{end}}dashboard link: {{.Link}}
+compiler:       {{.CompilerID}}
 {{if .UserSpaceArch}}userspace arch: {{.UserSpaceArch}}
 {{end}}{{if .PatchLink}}patch:          {{.PatchLink}}
 {{end}}{{if and (not .CrashTitle) (not .Error)}}
diff --git a/dashboard/app/main.go b/dashboard/app/main.go
index c1e47c6..55d0776 100644
--- a/dashboard/app/main.go
+++ b/dashboard/app/main.go
@@ -134,25 +134,26 @@
 }
 
 type uiBug struct {
-	Namespace      string
-	Title          string
-	NumCrashes     int64
-	NumCrashesBad  bool
-	BisectCause    bool
-	FirstTime      time.Time
-	LastTime       time.Time
-	ReportedTime   time.Time
-	ClosedTime     time.Time
-	ReproLevel     dashapi.ReproLevel
-	ReportingIndex int
-	Status         string
-	Link           string
-	ExternalLink   string
-	CreditEmail    string
-	Commits        []*uiCommit
-	PatchedOn      []string
-	MissingOn      []string
-	NumManagers    int
+	Namespace       string
+	Title           string
+	NumCrashes      int64
+	NumCrashesBad   bool
+	BisectCauseDone bool
+	BisectFixDone   bool
+	FirstTime       time.Time
+	LastTime        time.Time
+	ReportedTime    time.Time
+	ClosedTime      time.Time
+	ReproLevel      dashapi.ReproLevel
+	ReportingIndex  int
+	Status          string
+	Link            string
+	ExternalLink    string
+	CreditEmail     string
+	Commits         []*uiCommit
+	PatchedOn       []string
+	MissingOn       []string
+	NumManagers     int
 }
 
 type uiCrash struct {
@@ -210,15 +211,20 @@
 	if err != nil {
 		return err
 	}
-	groups, fixedCount, err := fetchNamespaceBugs(c, accessLevel, hdr.Namespace)
+	manager := r.FormValue("manager")
+	groups, fixedCount, err := fetchNamespaceBugs(c, accessLevel, hdr.Namespace, manager)
 	if err != nil {
 		return err
 	}
+	fixedLink := fmt.Sprintf("/%v/fixed", hdr.Namespace)
+	if manager != "" {
+		fixedLink = fmt.Sprintf("%v?manager=%v", fixedLink, manager)
+	}
 	data := &uiMainPage{
 		Header:     hdr,
 		Now:        timeNow(c),
 		FixedCount: fixedCount,
-		FixedLink:  fmt.Sprintf("/%v/fixed", hdr.Namespace),
+		FixedLink:  fixedLink,
 		Groups:     groups,
 		Managers:   managers,
 	}
@@ -257,7 +263,8 @@
 		return err
 	}
 	hdr.Subpage = typ.Subpage
-	bugs, err := fetchTerminalBugs(c, accessLevel, hdr.Namespace, typ)
+	manager := r.FormValue("manager")
+	bugs, err := fetchTerminalBugs(c, accessLevel, hdr.Namespace, manager, typ)
 	if err != nil {
 		return err
 	}
@@ -489,12 +496,15 @@
 	}
 }
 
-func fetchNamespaceBugs(c context.Context, accessLevel AccessLevel, ns string) ([]*uiBugGroup, int, error) {
+func fetchNamespaceBugs(c context.Context, accessLevel AccessLevel,
+	ns, manager string) ([]*uiBugGroup, int, error) {
 	var bugs []*Bug
-	_, err := db.NewQuery("Bug").
-		Filter("Namespace=", ns).
-		GetAll(c, &bugs)
-	if err != nil {
+	query := db.NewQuery("Bug").
+		Filter("Namespace=", ns)
+	if manager != "" {
+		query = query.Filter("HappenedOn=", manager)
+	}
+	if _, err := query.GetAll(c, &bugs); err != nil {
 		return nil, 0, err
 	}
 	state, err := loadReportingState(c)
@@ -580,13 +590,16 @@
 	return uiGroups, fixedCount, nil
 }
 
-func fetchTerminalBugs(c context.Context, accessLevel AccessLevel, ns string, typ *TerminalBug) (*uiBugGroup, error) {
+func fetchTerminalBugs(c context.Context, accessLevel AccessLevel,
+	ns, manager string, typ *TerminalBug) (*uiBugGroup, error) {
 	var bugs []*Bug
-	_, err := db.NewQuery("Bug").
+	query := db.NewQuery("Bug").
 		Filter("Namespace=", ns).
-		Filter("Status=", typ.Status).
-		GetAll(c, &bugs)
-	if err != nil {
+		Filter("Status=", typ.Status)
+	if manager != "" {
+		query = query.Filter("HappenedOn=", manager)
+	}
+	if _, err := query.GetAll(c, &bugs); err != nil {
 		return nil, err
 	}
 	state, err := loadReportingState(c)
@@ -734,21 +747,22 @@
 	}
 	id := bug.keyHash()
 	uiBug := &uiBug{
-		Namespace:      bug.Namespace,
-		Title:          bug.displayTitle(),
-		BisectCause:    bug.BisectCause > BisectPending,
-		NumCrashes:     bug.NumCrashes,
-		FirstTime:      bug.FirstTime,
-		LastTime:       bug.LastTime,
-		ReportedTime:   reported,
-		ClosedTime:     bug.Closed,
-		ReproLevel:     bug.ReproLevel,
-		ReportingIndex: reportingIdx,
-		Status:         status,
-		Link:           bugLink(id),
-		ExternalLink:   link,
-		CreditEmail:    creditEmail,
-		NumManagers:    len(managers),
+		Namespace:       bug.Namespace,
+		Title:           bug.displayTitle(),
+		BisectCauseDone: bug.BisectCause > BisectPending,
+		BisectFixDone:   bug.BisectFix > BisectPending,
+		NumCrashes:      bug.NumCrashes,
+		FirstTime:       bug.FirstTime,
+		LastTime:        bug.LastTime,
+		ReportedTime:    reported,
+		ClosedTime:      bug.Closed,
+		ReproLevel:      bug.ReproLevel,
+		ReportingIndex:  reportingIdx,
+		Status:          status,
+		Link:            bugLink(id),
+		ExternalLink:    link,
+		CreditEmail:     creditEmail,
+		NumManagers:     len(managers),
 	}
 	updateBugBadness(c, uiBug)
 	if len(bug.Commits) != 0 {
@@ -783,7 +797,8 @@
 
 func mergeUIBug(c context.Context, bug *uiBug, dup *Bug) {
 	bug.NumCrashes += dup.NumCrashes
-	bug.BisectCause = bug.BisectCause || dup.BisectCause > BisectPending
+	bug.BisectCauseDone = bug.BisectCauseDone || dup.BisectCause > BisectPending
+	bug.BisectFixDone = bug.BisectFixDone || dup.BisectFix > BisectPending
 	if bug.LastTime.Before(dup.LastTime) {
 		bug.LastTime = dup.LastTime
 	}
diff --git a/dashboard/app/reporting_email.go b/dashboard/app/reporting_email.go
index 59fef04..3b3df67 100644
--- a/dashboard/app/reporting_email.go
+++ b/dashboard/app/reporting_email.go
@@ -269,6 +269,10 @@
 		log.Warningf(c, "failed to parse email: %v", err)
 		return nil
 	}
+	// Ignore any incoming emails from syzbot itself.
+	if ownEmail(c) == msg.From {
+		return nil
+	}
 	log.Infof(c, "received email: subject %q, from %q, cc %q, msg %q, bug %q, cmd %q, link %q",
 		msg.Subject, msg.From, msg.Cc, msg.MessageID, msg.BugID, msg.Command, msg.Link)
 	if msg.Command == email.CmdFix && msg.CommandArgs == "exact-commit-title" {
diff --git a/dashboard/app/static/common.js b/dashboard/app/static/common.js
index f501d61..6d03cf7 100644
--- a/dashboard/app/static/common.js
+++ b/dashboard/app/static/common.js
@@ -41,7 +41,6 @@
 function textSort(v) { return v.toLowerCase(); }
 function numSort(v) { return -parseInt(v); }
 function floatSort(v) { return -parseFloat(v); }
-function yesSort(v) { return v == "yes" ? 0 : 1; }
 function reproSort(v) { return v == "C" ? 0 : v == "syz" ? 1 : 2; }
 function patchedSort(v) { return v == "" ? -1 : parseInt(v); }
 
diff --git a/dashboard/app/static/style.css b/dashboard/app/static/style.css
index ee5ef5f..da32203 100644
--- a/dashboard/app/static/style.css
+++ b/dashboard/app/static/style.css
@@ -127,8 +127,8 @@
 }
 
 .list_table .stat {
-	width: 50pt;
-	max-width: 50pt;
+	width: 55pt;
+	max-width: 55pt;
 	font-family: monospace;
 	text-align: right;
 }
diff --git a/dashboard/app/templates.html b/dashboard/app/templates.html
index 8c95831..03ec252 100644
--- a/dashboard/app/templates.html
+++ b/dashboard/app/templates.html
@@ -79,7 +79,7 @@
 		{{end}}
 		<th><a onclick="return sortTable(this, 'Title', textSort)" href="#">Title</a></th>
 		<th><a onclick="return sortTable(this, 'Repro', reproSort)" href="#">Repro</a></th>
-		<th><a onclick="return sortTable(this, 'Bisected', yesSort)" href="#">Bisected</a></th>
+		<th><a onclick="return sortTable(this, 'Bisected', textSort)" href="#">Bisected</a></th>
 		<th><a onclick="return sortTable(this, 'Count', numSort)" href="#">Count</a></th>
 		<th><a onclick="return sortTable(this, 'Last', timeSort)" href="#">Last</a></th>
 		<th><a onclick="return sortTable(this, 'Reported', timeSort)" href="#">Reported</a></th>
@@ -101,7 +101,15 @@
 			{{if $.ShowNamespace}}<td>{{$b.Namespace}}</td>{{end}}
 			<td class="title"><a href="{{$b.Link}}">{{$b.Title}}</a></td>
 			<td class="stat">{{formatReproLevel $b.ReproLevel}}</td>
-			<td class="stat">{{if $b.BisectCause}}yes{{end}}</td>
+			<td class="stat">
+				{{if and $b.BisectCauseDone $b.BisectFixDone}}
+					cause+fix
+				{{else if $b.BisectCauseDone}}
+					cause
+				{{else if $b.BisectFixDone}}
+					fix
+				{{end}}
+			</td>
 			<td class="stat {{if $b.NumCrashesBad}}bad{{end}}">{{$b.NumCrashes}}</td>
 			<td class="stat">{{formatLateness $.Now $b.LastTime}}</td>
 			<td class="stat">
@@ -223,3 +231,55 @@
 	</span>
 {{end}}
 {{end}}
+
+{{/* Show bisection results */}}
+{{define "bisect_results"}}
+{{if .}}
+	{{$causeJob := 1}}
+	{{$fixJob := 2}}
+	{{if .ErrorLink}}
+		<b>Bisection: {{link .ErrorLink "error"}}
+		({{link .LogLink "bisect log"}})</b><br>
+	{{else if .Commit}}
+		{{if eq .Type $causeJob}}
+			<b>Bisection: introduced by</b>
+		{{else if eq .Type $fixJob}}
+			<b>Bisection: fixed by</b>
+		{{end}}
+		<b>({{link .LogLink "bisect log"}}):</b><br>
+		<br><span class="mono">
+		commit {{.Commit.Hash}}<br>
+		Author: {{.Commit.Author}}<br>
+		Date:   {{formatKernelTime .Commit.Date}}<br>
+		<br>
+		&nbsp;&nbsp;{{.Commit.Title}}<br>
+		</span><br>
+	{{else if .Commits}}
+		{{if eq .Type $causeJob}}
+			<b>Bisection: the cause commit could be any of</b>
+		{{else if eq .Type $fixJob}}
+			<b>Bisection: the fix commit could be any of</b>
+		{{end}}
+		<b>({{link .LogLink "bisect log"}}):</b><br>
+		<br><span class="mono">
+		{{range $com := .Commits}}
+			&nbsp;&nbsp;{{formatTagHash $com.Hash}} {{$com.Title}}<br>
+		{{end}}
+		</span>
+	{{else}}
+		{{if eq .Type $causeJob}}
+			<b>Bisection: the bug happens on the oldest tested release</b>
+		{{else if eq .Type $fixJob}}
+			<b>Bisection: the bug occurs on the latest tested release</b>
+		{{end}}
+		<br>
+	{{end}}
+	Tree: <span title="{{.Manager}}">{{.KernelAlias}}</span><br>
+	{{if .CrashLogLink}}
+		Crash: {{link .CrashReportLink .CrashTitle}} ({{link .CrashLogLink "log"}})<br>
+		Repro: {{optlink .Crash.ReproCLink "C"}}
+		{{optlink .Crash.ReproSyzLink "syz"}}
+		{{optlink .Crash.KernelConfigLink ".config"}}<br>
+	{{end}}
+{{end}}
+{{end}}
diff --git a/dashboard/config/generate-config-kmsan-from-kasan.sh b/dashboard/config/generate-config-kmsan-from-kasan.sh
index 6e6d2b4..4bdaf89 100755
--- a/dashboard/config/generate-config-kmsan-from-kasan.sh
+++ b/dashboard/config/generate-config-kmsan-from-kasan.sh
@@ -1,25 +1,24 @@
 #!/bin/bash
 # Generate upstream-kmsan.config from upstream-kasan.config.
-# Make sure $CC points to the Clang binary and $SOURCEDIR - to the kernel tree.
-
-THISDIR=`cd $(dirname $0); pwd`
-KASAN_CONFIG=${THISDIR}/upstream-kasan.config
-KMSAN_CONFIG=${THISDIR}/upstream-kmsan.config
-KMSAN_ADD=${THISDIR}/bits-kmsan.config
-. ${THISDIR}/util.sh
+# Make sure $CC points to the Clang binary and $KERNEL_SOURCE - to the kernel tree.
 
 [ -z "${CC}" ] && echo 'Please set $CC to point to the compiler!' && exit
-[ -z "${SOURCEDIR}" ] && echo 'Please set $SOURCEDIR to point to the kernel tree!' && exit
+[ -z "${KERNEL_SOURCE}" ] && echo 'Please set $KERNEL_SOURCE to point to the kernel tree!' && exit
 
-(
-cd $SOURCEDIR
+THIS_DIR=`cd $(dirname $0); pwd`
+. ${THIS_DIR}/util.sh
+
+KASAN_CONFIG=${THIS_DIR}/upstream-kasan.config
+KMSAN_CONFIG=${THIS_DIR}/upstream-kmsan.config
+KMSAN_ADD=${THIS_DIR}/bits-kmsan.config
+
+cd ${KERNEL_SOURCE}
+
 cp ${KASAN_CONFIG} .config
-scripts/kconfig/merge_config.sh .config ${KMSAN_ADD}
-make CC="${CC}" oldconfig < /dev/null
+scripts/kconfig/merge_config.sh -m .config ${KMSAN_ADD}
+make ${MAKE_VARS} olddefconfig
 
 util_add_usb_bits
-util_add_syzbot_extra_bits "${KMSAN_CONFIG}"
+util_add_syzbot_extra_bits
 
-cat .config >> ${KMSAN_CONFIG}
-cp ${KMSAN_CONFIG} .config
-)
+cp .config ${KMSAN_CONFIG}
diff --git a/dashboard/config/generate-config-usb.sh b/dashboard/config/generate-config-usb.sh
index ffe89c7..78cf19b 100755
--- a/dashboard/config/generate-config-usb.sh
+++ b/dashboard/config/generate-config-usb.sh
@@ -2,26 +2,25 @@
 
 set -eux
 
-THISDIR=`cd $(dirname $0); pwd`
-
-SYZBOT_CONFIG=${THISDIR}/bits-syzbot.config
-USB_CONFIG=${THISDIR}/upstream-usb.config
-. ${THISDIR}/util.sh
-
 [ -z "${CC}" ] && echo 'Please set $CC to point to the compiler!' && exit
-[ -z "${SOURCEDIR}" ] && echo 'Please set $SOURCEDIR to point to the kernel tree!' && exit
+[ -z "${KERNEL_SOURCE}" ] && echo 'Please set $KERNEL_SOURCE to point to the kernel tree!' && exit
 
-cd ${SOURCEDIR}
-make CC="${CC}" defconfig
-make CC="${CC}" kvmconfig
+THIS_DIR=`cd $(dirname $0); pwd`
+. ${THIS_DIR}/util.sh
+
+OUTPUT_CONFIG=${THIS_DIR}/upstream-usb.config
+
+cd ${KERNEL_SOURCE}
+
+make ${MAKE_VARS} defconfig
+make ${MAKE_VARS} kvmconfig
 
 util_add_usb_bits
 util_add_syzbot_bits
 
 sed -i "s#=m\$#=y#g" .config
-make CC="${CC}" olddefconfig
+make ${MAKE_VARS} olddefconfig
 
-util_add_syzbot_extra_bits "${USB_CONFIG}"
+util_add_syzbot_extra_bits
 
-cat .config >> ${USB_CONFIG}
-cp ${USB_CONFIG} .config
+cp .config ${OUTPUT_CONFIG}
diff --git a/dashboard/config/upstream-usb.config b/dashboard/config/upstream-usb.config
index 0ca7716..625e385 100644
--- a/dashboard/config/upstream-usb.config
+++ b/dashboard/config/upstream-usb.config
@@ -10,7 +10,7 @@
 
 #
 # Automatically generated file; DO NOT EDIT.
-# Linux/x86 5.3.0-rc2 Kernel Configuration
+# Linux/x86 5.3.0-rc7 Kernel Configuration
 #
 
 #
@@ -4908,9 +4908,6 @@
 CONFIG_USB_LEDS_TRIGGER_USBPORT=y
 CONFIG_USB_AUTOSUSPEND_DELAY=2
 CONFIG_USB_MON=y
-CONFIG_USB_WUSB=y
-CONFIG_USB_WUSB_CBAF=y
-# CONFIG_USB_WUSB_CBAF_DEBUG is not set
 
 #
 # USB Host Controller Drivers
@@ -4940,8 +4937,6 @@
 CONFIG_USB_SL811_HCD_ISO=y
 CONFIG_USB_SL811_CS=y
 CONFIG_USB_R8A66597_HCD=y
-CONFIG_USB_WHCI_HCD=y
-CONFIG_USB_HWA_HCD=y
 CONFIG_USB_HCD_BCMA=y
 CONFIG_USB_HCD_SSB=y
 # CONFIG_USB_HCD_TEST_MODE is not set
@@ -4991,6 +4986,7 @@
 CONFIG_USBIP_HOST=y
 CONFIG_USBIP_VUDC=y
 # CONFIG_USBIP_DEBUG is not set
+# CONFIG_USB_CDNS3 is not set
 CONFIG_USB_MUSB_HDRC=y
 # CONFIG_USB_MUSB_HOST is not set
 # CONFIG_USB_MUSB_GADGET is not set
@@ -5229,10 +5225,6 @@
 # CONFIG_USB_ROLES_INTEL_XHCI is not set
 CONFIG_USB_LED_TRIG=y
 CONFIG_USB_ULPI_BUS=y
-CONFIG_UWB=y
-CONFIG_UWB_HWA=y
-CONFIG_UWB_WHCI=y
-CONFIG_UWB_I1480U=y
 CONFIG_MMC=y
 CONFIG_PWRSEQ_EMMC=y
 # CONFIG_PWRSEQ_SD8787 is not set
@@ -5703,6 +5695,15 @@
 # CONFIG_HYSDN is not set
 # end of ISDN CAPI drivers
 
+CONFIG_USB_WUSB=y
+CONFIG_USB_WUSB_CBAF=y
+# CONFIG_USB_WUSB_CBAF_DEBUG is not set
+CONFIG_USB_WHCI_HCD=y
+CONFIG_USB_HWA_HCD=y
+CONFIG_UWB=y
+CONFIG_UWB_HWA=y
+CONFIG_UWB_WHCI=y
+CONFIG_UWB_I1480U=y
 CONFIG_X86_PLATFORM_DEVICES=y
 # CONFIG_ACER_WMI is not set
 # CONFIG_ACER_WIRELESS is not set
@@ -5885,13 +5886,6 @@
 # end of i.MX SoC drivers
 
 #
-# IXP4xx SoC drivers
-#
-# CONFIG_IXP4XX_QMGR is not set
-# CONFIG_IXP4XX_NPE is not set
-# end of IXP4xx SoC drivers
-
-#
 # Qualcomm SoC drivers
 #
 # end of Qualcomm SoC drivers
diff --git a/dashboard/config/util.sh b/dashboard/config/util.sh
index a485c9a..a39fe50 100755
--- a/dashboard/config/util.sh
+++ b/dashboard/config/util.sh
@@ -4,24 +4,24 @@
 
 set -eux
 
-THISDIR=`cd $(dirname $0); pwd`
-
 [ -z "${CC}" ] && echo 'Please set $CC to point to the compiler!' && exit
 
+THIS_DIR=`cd $(dirname $0); pwd`
+MAKE_VARS="CC=${CC}"
+SYZBOT_BITS=${THIS_DIR}/bits-syzbot.config
+
 function util_add_syzbot_bits {
-  scripts/kconfig/merge_config.sh .config $SYZBOT_CONFIG
-  # Not merged in for some reason.
-  scripts/config -e CONFIG_KCOV_ENABLE_COMPARISONS
-  make CC="${CC}" olddefconfig
+  scripts/kconfig/merge_config.sh -m .config $SYZBOT_BITS
+  make ${MAKE_VARS} olddefconfig
 }
 
 function util_add_usb_bits {
-  MERGE_USB_SCRIPT=${THISDIR}/kconfiglib-merge-usb-configs.py
+  MERGE_USB_SCRIPT=${THIS_DIR}/kconfiglib-merge-usb-configs.py
 
   git clone --depth=1 https://github.com/ulfalizer/Kconfiglib.git
   wget -qO- https://raw.githubusercontent.com/ulfalizer/Kconfiglib/master/makefile.patch | patch -p1
-  for config in ${THISDIR}/distros/*; do
-    make CC="${CC}" scriptconfig SCRIPT=${MERGE_USB_SCRIPT} SCRIPT_ARG=${config}
+  for config in ${THIS_DIR}/distros/*; do
+    make ${MAKE_VARS} scriptconfig SCRIPT=${MERGE_USB_SCRIPT} SCRIPT_ARG=${config}
   done
   git checkout ./scripts/kconfig/Makefile
   rm -rf ./Kconfiglib
@@ -43,9 +43,12 @@
   scripts/config -e CONFIG_USB_GADGETFS
   scripts/config -e CONFIG_USB_DUMMY_HCD
   scripts/config -e CONFIG_USB_FUZZER
+
+  make ${MAKE_VARS} olddefconfig
 }
 
 function util_add_syzbot_extra_bits {
+  TMP_FILE=$(mktemp /tmp/syzkaller.XXXXXX)
   echo "# The following configs are added manually, preserve them.
 # CONFIG_DEBUG_MEMORY was once added to mm tree and cause disabling of KASAN,
 # which in turn caused storm of assorted crashes after silent memory
@@ -55,5 +58,8 @@
 # This config can be used to enable any additional temporal debugging
 # features in linux-next tree.
 CONFIG_DEBUG_AID_FOR_SYZBOT=y
-" > $1
+" > ${TMP_FILE}
+  cat .config >> ${TMP_FILE}
+  mv ${TMP_FILE} .config
+  rm -rf ${TMP_FILE}
 }
diff --git a/dashboard/dashapi/dashapi.go b/dashboard/dashapi/dashapi.go
index fffc0b8..bb5771b 100644
--- a/dashboard/dashapi/dashapi.go
+++ b/dashboard/dashapi/dashapi.go
@@ -332,6 +332,7 @@
 	LogLink         string
 	CrashLogLink    string
 	CrashReportLink string
+	Fix             bool
 }
 
 type BugUpdate struct {
diff --git a/docs/fuchsia/README.md b/docs/fuchsia/README.md
index ec1a083..472362c 100644
--- a/docs/fuchsia/README.md
+++ b/docs/fuchsia/README.md
@@ -48,6 +48,12 @@
 
 ## Running syz-manager
 
+Running syz-manager requires you to have built fuchsia previously, and added the ssh keys to the fuchsia.zbi image:
+
+```
+$ ${SOURCEDIR}/out/x64.zircon/tools/zbi -o ${SOURCEDIR}/out/x64/fuchsia-ssh.zbi ${SOURCEDIR}/out/x64/fuchsia.zbi --entry "data/ssh/authorized_keys=${SOURCEDIR}/.ssh/authorized_keys"
+```
+
 Run `syz-manager` with a config along the lines of:
 ```
 {
@@ -68,7 +74,7 @@
                 "cpu": 4,
                 "mem": 2048,
                 "kernel": "/fuchsia/out/x64.zircon/multiboot.bin",
-                "initrd": "/fuchsia/out/x64/fuchsia.zbi"
+                "initrd": "/fuchsia/out/x64/fuchsia-ssh.zbi"
         }
 }
 ```
@@ -79,14 +85,14 @@
 
 To build fuchsia run:
 ```shell
-$ fx --dir "out/x64" set core.x64
+$ fx --dir "out/x64" set core.x64 --with-base "//bundles:tools"
 $ fx clean-build
 ```
 
 And
 
 ```shell
-$ fx --dir "out/arm64" set core.arm64
+$ fx --dir "out/arm64" set core.arm64 --with-base "//bundles:tools"
 $ fx clean-build
 ```
 
diff --git a/docs/linux/external_fuzzing_usb.md b/docs/linux/external_fuzzing_usb.md
index 3d3ca06..f820616 100644
--- a/docs/linux/external_fuzzing_usb.md
+++ b/docs/linux/external_fuzzing_usb.md
@@ -1,45 +1,263 @@
 External USB fuzzing for Linux kernel
 =====================================
 
-# USB fuzzing with syzkaller
+Syzkaller support fuzzing the Linux kernel USB subsystem externally
+(as it would be done by plugging in a physical USB device with e.g. [Facedancer](https://github.com/usb-tools/Facedancer)).
+This allowed to find over [100 bugs](/docs/linux/found_bugs_usb.md) in the Linux kernel USB stack so far.
+This is still in development and things might change.
 
-This page describes the current state of external USB fuzzing support in syzkaller.
-Note, that it's still in development and things might change.
+USB fuzzing consists of 3 parts:
 
-This allowed to find over [80 bugs](/docs/linux/found_bugs_usb.md) in the Linux kernel USB stack so far.
+1. Syzkaller changes that are now upstream.
+2. Kernel interface for USB device emulation, which can be found [here](https://github.com/google/kasan/commits/usb-fuzzer).
+3. KCOV changes that allow to collect coverage from background threads and interrupts
+(the former can be found [here](https://github.com/google/kasan/commits/usb-fuzzer), the latter in still in development).
 
-How to set this up:
+Currently syzkaller defines 5 USB syzcalls (see [this](/sys/linux/vusb.txt) and [this](/executor/common_usb.h)):
+
+1. `syz_usb_connect` - connects a USB device.
+2. `syz_usb_disconnect` - disconnects a USB device.
+3. `syz_usb_control_io` - sends or receives a control message over endpoint 0.
+4. `syz_usb_ep_write` - sends a message to an endpoint.
+4. `syz_usb_ep_read` - receives a message from an endpoint.
+
+More details can be found:
+
+1. In the OffensiveCon 2019 "Coverage-Guided USB Fuzzing with Syzkaller" talk
+([slides](https://docs.google.com/presentation/d/1z-giB9kom17Lk21YEjmceiNUVYeI6yIaG5_gZ3vKC-M/edit?usp=sharing), [video](https://www.youtube.com/watch?v=1MD5JV6LfxA)).
+2. In [this](https://marc.info/?l=linux-usb&m=155551883403285&w=2) email.
+
+A few major things that need to be done:
+
+1. Implement proper support for multiple interfaces per configuration.
+What currently is missing is enabling/disabling USB endpoints depending of which interface is set.
+This is required to properly emulate some USB devices like the CDC NCM class.
+2. Collect coverage from interrupts (this is required to enable better fuzzing of USB drivers after enumeration completes).
+3. Add descriptions for all main USB classes.
+4. Upstream KCOV changes.
+5. Upstream the kernel interface for USB device emulation.
+
+Some ideas for things that can be done:
+
+1. Add a mode for standalone fuzzing of physical USB hosts (by using e.g. Raspberry Pi Zero, see below).
+This includes at least: a. making sure that current USB emulation implementation works properly on different OSes (there are some differences);
+b. using USB requests coming from the host as a signal (like coverage) to enable "signal-driven" fuzzing,
+c. making UDC driver name configurable for syz-execprog and syz-prog2c.
+2. Generate syzkaller programs from usbmon trace that is produced by actual USB devices (this should make the fuzzer to go significantly deeper into the USB drivers code).
+
+Syzkaller descriptions for USB fuzzing can be found [here](/sys/linux/vusb.txt).
+
+
+## Setting up
 
 1. Checkout the `usb-fuzzer` branch from https://github.com/google/kasan
 
-2. Configure and build the kernel. You need to enable `CONFIG_USB_FUZZER=y`, `CONFIG_USB_DUMMY_HCD=y` and all the USB drivers you're interested in fuzzing:
+2. Configure the kernel (at the very least `CONFIG_USB_FUZZER=y` and `CONFIG_USB_DUMMY_HCD=y` need to be enabled).
 
-   ```
-   menu config -> Device Drivers -> USB Support ->
-     -> USB Gadget Support (enable) ->
-       -> USB Peripheral Controller -> Dummy HCD (enable)
-       -> USB Gadget Fuzzer (enable)
-   ```
+    The easiest option is to use the [config](/dashboard/config/upstream-usb.config) from the syzbot USB fuzzing instance.
 
-3. Update syzkaller descriptions by extracting USB device info using the instructions below.
+    Another option is to use the USB config generation [script](/dashboard/config/generate-config-usb.sh).
+    This script allows to extract enabled USB related configs from a set of existing `.config` files.
+    Right now it extracts configs only from [one](/dashboard/config/distros) of the Ubuntu kernel's configs.
 
-4. Enable `syz_usb_connect`, `syz_usb_disconnect`, `syz_usb_control_io` and `syz_usb_ep_write` syscalls in the manager config.
+    ``` bash
+    cd ./dashboard/config/
+    # Put relevant .configs into ./distros/
+    CC=$COMPILER_BINARY_PATH SOURCEDIR=$KERNEL_SOURCE_PATH ./generate-config-usb.sh
+    ```
 
-5. Set `sandbox` to `none` in the manager config.
+3. Build the kernel.
 
-6. Pass `dummy_hcd.num=8` to the kernel command line in the maganer config.
+4. Optionally update syzkaller descriptions by extracting USB IDs using the instructions below.
 
-7. Run.
+5. Enable `syz_usb_connect`, `syz_usb_disconnect`, `syz_usb_control_io`, `syz_usb_ep_write` and `syz_usb_ep_read` syzcalls in the manager config.
 
-Syzkaller descriptions for USB fuzzing can be found here: [1](/sys/linux/vusb.txt), [2](/sys/linux/init_vusb.go) and [3](/sys/linux/init_vusb_ids.go).
+6. Set `sandbox` to `none` in the manager config.
+
+7. Pass `dummy_hcd.num=8` to the kernel command line in the maganer config.
+
+8. Run.
 
 
-## Updating syzkaller USB descriptions
+## Updating syzkaller USB IDs
+
+Syzkaller uses a list of hardcoded [USB IDs](/sys/linux/init_vusb_ids.go) that are [patched](/sys/linux/init_vusb.go) into the `syz_usb_connect` syzcall by syzkaller runtime.
+One of the ways to make syzkaller target only particular USB drivers is to alter that list.
+The instructions below describe a way to generate syzkaller USB IDs for all USB drivers enabled in your .config.
 
 1. Apply [this](/tools/syz-usbgen/usb_ids.patch) kernel patch.
 
 2. Build and boot the kernel.
 
-3. Connect some USB device to it (e.g. with `syz-exeprog usb.log`, where `usb.log` is some program that utilizes the `syz_usb_connect` syzcall).
+3. Connect a USB HID device. In case you're using a `CONFIG_USB_FUZZER=y` kernel, use the provided [keyboard emulation program](/tools/syz-usbgen/keyboard.c).
 
-4. Use [syz-usbgen](/tools/syz-usbgen/usbgen.go) script to update [syzkaller descriptions](/sys/linux/init_vusb_ids.go).
+4. Use [syz-usbgen](/tools/syz-usbgen/usbgen.go) script to update [syzkaller descriptions](/sys/linux/init_vusb_ids.go):
+
+    ```
+    ./bin/syz-usbgen KERNEL_LOG ./sys/linux/init_vusb_ids.go
+    ```
+
+
+## Running reproducers with Raspberry Pi Zero W
+
+It's possible to run syzkaller USB reproducers by using a Linux board plugged into a physical USB host.
+These instructions describe how to set this up on a Raspberry Pi Zero W, but any other board that has a working USB UDC driver can be used as well.
+
+1. Download `raspbian-stretch-lite.img` from [here](https://www.raspberrypi.org/downloads/raspbian/).
+
+2. Flash the image into an SD card as described [here](https://www.raspberrypi.org/documentation/installation/installing-images/linux.md).
+
+3. Enable UART as described [here](https://www.raspberrypi.org/documentation/configuration/uart.md).
+
+4. Boot the board and get a shell over UART as described [here](https://learn.adafruit.com/raspberry-pi-zero-creation/give-it-life). You'll need a USB-UART module for that. The default login credentials are `pi` and `raspberry`.
+
+5. Get the board connected to the internet (plug in a USB Ethernet adapter or follow [this](https://www.raspberrypi.org/documentation/configuration/wireless/wireless-cli.md)).
+
+6. Update: `sudo apt-get update && sudo apt-get dist-upgrade && sudo rpi-update && sudo reboot`.
+
+7. Install useful packages: `sudo apt-get install vim git`.
+
+8. Download and install Go:
+
+    ``` bash
+    curl https://dl.google.com/go/go1.10.8.linux-armv6l.tar.gz -o go1.10.8.linux-armv6l.tar.gz
+    tar -xf go1.10.8.linux-armv6l.tar.gz
+    mv go goroot-1.10.8
+    mkdir gopath-1.10.8
+    export GOPATH=~/gopath-1.10.8
+    export GOROOT=~/goroot-1.10.8
+    export PATH=~/goroot-1.10.8/bin:$PATH
+    export PATH=~/gopath-1.10.8/bin:$PATH
+    ```
+
+9. Download syzkaller, apply the patch below and build `syz-executor`:
+
+    ``` c
+    diff --git a/executor/common_usb.h b/executor/common_usb.h
+    index e342d808..278c2f4e 100644
+    --- a/executor/common_usb.h
+    +++ b/executor/common_usb.h
+    @@ -269,9 +269,7 @@ static volatile long syz_usb_connect(volatile long a0, volatile long a1, volatil
+    
+            // TODO: consider creating two dummy_udc's per proc to increace the chance of
+            // triggering interaction between multiple USB devices within the same program.
+    -       char device[32];
+    -       sprintf(&device[0], "dummy_udc.%llu", procid);
+    -       rv = usb_fuzzer_init(fd, speed, "dummy_udc", &device[0]);
+    +       rv = usb_fuzzer_init(fd, speed, "20980000.usb", "20980000.usb");
+            if (rv < 0) {
+                    debug("syz_usb_connect: usb_fuzzer_init failed with %d\n", rv);
+                    return rv;
+    diff --git a/executor/executor.cc b/executor/executor.cc
+    index 34949a01..1afcb288 100644
+    --- a/executor/executor.cc
+    +++ b/executor/executor.cc
+    @@ -604,8 +604,8 @@ retry:
+                            call_extra_cover = true;
+                    }
+                    if (strncmp(syscalls[call_num].name, "syz_usb_connect", strlen("syz_usb_connect")) == 0) {
+    -                       prog_extra_timeout = 2000;
+    -                       call_extra_timeout = 2000;
+    +                       prog_extra_timeout = 5000;
+    +                       call_extra_timeout = 5000;
+                    }
+                    if (strncmp(syscalls[call_num].name, "syz_usb_control_io", strlen("syz_usb_control_io")) == 0)
+                            call_extra_timeout = 300;
+    ```
+
+    ``` bash
+    go get -u -d github.com/google/syzkaller/...
+    cd ~/gopath-1.10.8/src/github.com/google/syzkaller
+    # Put the patch above into ./syzkaller.patch
+    git apply ./syzkaller.patch
+    make executor
+    mkdir ~/syz-bin
+    cp bin/linux_arm/syz-executor ~/syz-bin/
+    ```
+
+10. Build `syz-execprog` on your host machine for arm32 with `make TARGETARCH=arm execprog` and copy to `~/syz-bin` onto the SD card.
+
+11. Make sure that ou can now execute syzkaller programs:
+
+    ``` bash
+    cat socket.log
+    r0 = socket$inet_tcp(0x2, 0x1, 0x0)
+    sudo ./syz-bin/syz-execprog -executor ./syz-bin/syz-executor -threaded=0 -collide=0 -procs=1 -nocgroups -nonetdev -nonetreset -notun -debug socket.log
+    ```
+
+12. Setup the dwc2 USB gadget driver:
+
+    ```
+    echo "dtoverlay=dwc2" | sudo tee -a /boot/config.txt
+    echo "dwc2" | sudo tee -a /etc/modules
+    sudo reboot
+    ```
+
+13. Get Linux kernel headers following [this](https://github.com/notro/rpi-source/wiki).
+
+14. Download the fuzzer module:
+
+    ``` bash
+    mkdir module
+    cd module
+    wget https://raw.githubusercontent.com/google/kasan/usb-fuzzer/drivers/usb/gadget/fuzzer/fuzzer.c
+    wget https://raw.githubusercontent.com/google/kasan/usb-fuzzer/include/uapi/linux/usb/fuzzer.h
+    ```
+
+    Apply the following change:
+
+    ``` c
+    diff --git a/fuzzer.c b/fuzzer.c
+    index 308c540..68d43b9 100644
+    --- a/fuzzer.c
+    +++ b/fuzzer.c
+    @@ -17,7 +17,7 @@
+     #include <linux/usb/gadgetfs.h>
+     #include <linux/usb/gadget.h>
+     
+    -#include <uapi/linux/usb/fuzzer.h>
+    +#include "fuzzer.h"
+     
+     #define        DRIVER_DESC "USB fuzzer"
+     #define DRIVER_NAME "usb-fuzzer-gadget"
+    ```
+
+    Add a `Makefile`:
+
+    ``` make
+    obj-m := fuzzer.o
+    KDIR := /lib/modules/$(shell uname -r)/build
+    PWD := $(shell pwd)
+    default:
+    	$(MAKE) -C $(KDIR) SUBDIRS=$(PWD) modules
+    ```
+
+    And build with `make`.
+
+15. Insert the module with `sudo insmod fuzzer.ko`.
+
+16. Build and test the [keyboard emulator program](https://raw.githubusercontent.com/google/syzkaller/up-usb-docs/tools/syz-usbgen/keyboard.c):
+
+    ``` bash
+    # Connect the board to some USB host.
+    wget https://raw.githubusercontent.com/google/syzkaller/up-usb-docs/tools/syz-usbgen/keyboard.c
+    gcc keyboard.c -o keyboard
+    sudo ./keyboard
+    # Make sure you see the letter 'x' being entered on the host.
+    ```
+
+17. You should now be able to execute syzkaller USB programs:
+
+    ``` bash
+    $ cat usb.log
+    r0 = syz_usb_connect(0x0, 0x24, &(0x7f00000001c0)={{0x12, 0x1, 0x0, 0x8e, 0x32, 0xf7, 0x20, 0xaf0, 0xd257, 0x4e87, 0x0, 0x0, 0x0, 0x1, [{{0x9, 0x2, 0x12, 0x1, 0x0, 0x0, 0x0, 0x0, [{{0x9, 0x4, 0xf, 0x0, 0x0, 0xff, 0xa5, 0x2c}}]}}]}}, 0x0)
+    $ sudo ./syz-bin/syz-execprog -executor ./syz-bin/syz-executor -threaded=0 -collide=0 -procs=1 -nocgroups -nonetdev -nonetreset -notun -debug usb.log
+    ```
+
+18. Follow [this](https://www.raspberrypi.org/documentation/configuration/wireless/access-point.md) to setup Wi-Fi hotspot.
+
+19. Follow [this](https://www.raspberrypi.org/documentation/remote-access/ssh/) to enable ssh.
+
+20. Optionally solder [Zero Stem](https://zerostem.io/) onto your Raspberry Pi Zero W.
+
+21. You can now connect the board to an arbitrary USB port, wait for it to boot, join its Wi-Fi network, ssh onto it, and run arbitrary syzkaller USB programs.
diff --git a/docs/linux/found_bugs_usb.md b/docs/linux/found_bugs_usb.md
index 1c9860e..667fef5 100644
--- a/docs/linux/found_bugs_usb.md
+++ b/docs/linux/found_bugs_usb.md
@@ -2,12 +2,14 @@
 
 ## Reported by syzbot
 
-[Reported by the USB fuzzing instance](https://groups.google.com/forum/#!searchin/syzkaller-bugs/%22usb-fuzzer%22%7Csort:date)
+Starting from early 2019, bugs in the USB drivers are being automatically reported by the USB fuzzing instance of syzbot and can be found [here](https://syzkaller.appspot.com/upstream?manager=ci2-upstream-usb). A list of CVEs for some of those can be found here [here](https://www.openwall.com/lists/oss-security/2019/08/20/2).
 
-[Reported by the KMSAN fuzzing instance](https://groups.google.com/forum/#!searchin/syzkaller-bugs/%22kmsan%22$20%22usb%22%7Csort:date)
+Some of the USB bugs are reported by the KMSAN fuzzing instance and can be either found [here](https://groups.google.com/forum/#!searchin/syzkaller-bugs/%22kmsan%22$20%22usb%22%7Csort:date) or [here](https://syzkaller.appspot.com/upstream?manager=ci-upstream-kmsan-gce) (via a manual search, e.g. for `kernel-usb-infoleak`).
 
 ## Manually reported
 
+These are the bugs that were manually reported before USB fuzzing was integrated into syzbot.
+
 ### USB drivers
 
 * usb/core: memory corruption due to an out-of-bounds access in usb_destroy_configuration [[fix](https://www.spinics.net/lists/linux-usb/msg163644.html)] [CVE-2017-17558]
diff --git a/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md b/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
index 0c74c42..da74b90 100644
--- a/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
+++ b/docs/linux/setup_linux-host_qemu-vm_arm-kernel.md
@@ -91,7 +91,7 @@
 Run:
 
 ```
-qemu-system-arm -m 512 -smp 2 -net nic -net user,host=10.0.2.10,hostfwd=tcp::10022-:22 -display none -serial stdio -machine vexpress-a15 -dtb /linux/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb -sd /buildroot/output/images/rootfs.ext2 -snapshot -kernel /linux/arch/arm/boot/zImage -append "earlyprintk=serial console=ttyAMA0 root=/dev/sda root=/dev/mmcblk0"
+qemu-system-arm -m 512 -smp 2 -net nic -net user,host=10.0.2.10,hostfwd=tcp::10022-:22 -display none -serial stdio -machine vexpress-a15 -dtb /linux/arch/arm/boot/dts/vexpress-v2p-ca15-tc1.dtb -sd /buildroot/output/images/rootfs.ext2 -snapshot -kernel /linux/arch/arm/boot/zImage -append "earlyprintk=serial console=ttyAMA0 root=/dev/mmcblk0"
 ```
 
 This should boot the kernel. Wait for login prompt, then in another console run:
@@ -131,8 +131,8 @@
 		"cmdline": "console=ttyAMA0 root=/dev/mmcblk0",
 		"kernel": "/linux/arch/arm/boot/zImage",
 		"image_device": "sd",
-		"mem": 512
-		"cpu": 2,
+		"mem": 512,
+		"cpu": 2
 	}
 }
 ```
diff --git a/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md b/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md
index e6e473d..4b2cb8b 100644
--- a/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md
+++ b/docs/linux/setup_ubuntu-host_qemu-vm_x86-64-kernel.md
@@ -25,8 +25,8 @@
 Generate default configs:
 ``` bash
 cd $KERNEL
-make defconfig
-make kvmconfig
+make CC="$GCC/bin/gcc" defconfig
+make CC="$GCC/bin/gcc" kvmconfig
 ```
 
 Now we need to enable some config options required for syzkaller.
@@ -48,7 +48,7 @@
 
 Since enabling these options results in more sub options being available, we need to regenerate config. Run this and press enter each time when prompted for some config value to leave it as default:
 ``` bash
-make oldconfig
+make CC="$GCC/bin/gcc" oldconfig
 ```
 
 Build the kernel with previously built GCC:
diff --git a/docs/openbsd/found_bugs.md b/docs/openbsd/found_bugs.md
index 2beb7fb..a5db9a9 100644
--- a/docs/openbsd/found_bugs.md
+++ b/docs/openbsd/found_bugs.md
@@ -6,6 +6,8 @@
 
 Newer bugs comes first.
 
+- [acct: `vn_close(9)` race](https://marc.info/?l=openbsd-cvs&m=156585417104888&w=2)
+
 - [diskmap(4): side-effect in error path](https://marc.info/?l=openbsd-cvs&m=156499481623952&w=2)
 
 - [rtable_walk(9): stack exhausted due to recursion](https://marc.info/?l=openbsd-cvs&m=156113711405665&w=2)
diff --git a/docs/research.md b/docs/research.md
index 851420e..c348d01 100644
--- a/docs/research.md
+++ b/docs/research.md
@@ -1,5 +1,6 @@
 # Research work based on syzkaller
 
+* [Empirical Notes on the Interaction Between Continuous Kernel Fuzzing and Development](http://users.utu.fi/kakrind/publications/19/vulnfuzz_camera.pdf)
 * [FastSyzkaller: Improving Fuzz Efficiency for Linux Kernel Fuzzing](https://iopscience.iop.org/article/10.1088/1742-6596/1176/2/022013)
 * [Charm: Facilitating Dynamic Analysis of Device Drivers of Mobile Systems](https://www.usenix.org/system/files/conference/usenixsecurity18/sec18-talebi.pdf)
 ([video](https://www.usenix.org/conference/usenixsecurity18/presentation/talebi),
diff --git a/docs/syscall_descriptions.md b/docs/syscall_descriptions.md
index fd47fdc..b79e882 100644
--- a/docs/syscall_descriptions.md
+++ b/docs/syscall_descriptions.md
@@ -6,7 +6,7 @@
 
 ```
 open(file filename, flags flags[open_flags], mode flags[open_mode]) fd
-read(fd fd, buf buffer[out], count len[buf]) len[buf]
+read(fd fd, buf buffer[out], count len[buf])
 close(fd fd)
 open_mode = S_IRUSR, S_IWUSR, S_IXUSR, S_IRGRP, S_IWGRP, S_IXGRP, S_IROTH, S_IWOTH, S_IXOTH
 ```
@@ -24,7 +24,6 @@
 Here is an example (of a textual representation) of a program:
 
 ```
-mmap(&(0x7f0000000000), (0x1000), 0x3, 0x32, -1, 0)
 r0 = open(&(0x7f0000000000)="./file0", 0x3, 0x9)
 read(r0, &(0x7f0000000000), 42)
 close(r0)
diff --git a/executor/common.h b/executor/common.h
index 05c7597..1d0616d 100644
--- a/executor/common.h
+++ b/executor/common.h
@@ -41,7 +41,7 @@
 
 #if SYZ_EXECUTOR || SYZ_PROCS || SYZ_REPEAT && SYZ_ENABLE_CGROUPS ||         \
     SYZ_ENABLE_NETDEV || __NR_syz_mount_image || __NR_syz_read_part_table || \
-    __NR_syz_usb_connect || (GOOS_openbsd || GOOS_freebsd) && SYZ_TUN_ENABLE
+    __NR_syz_usb_connect || (GOOS_freebsd || GOOS_openbsd || GOOS_netbsd) && SYZ_TUN_ENABLE
 unsigned long long procid;
 #endif
 
@@ -167,6 +167,8 @@
 {
 #if SYZ_SANDBOX_ANDROID_UNTRUSTED_APP
 	char tmpdir_template[] = "/data/data/syzkaller/syzkaller.XXXXXX";
+#elif GOOS_fuchsia
+	char tmpdir_template[] = "/tmp/syzkaller.XXXXXX";
 #else
 	char tmpdir_template[] = "./syzkaller.XXXXXX";
 #endif
diff --git a/executor/common_bsd.h b/executor/common_bsd.h
index e483a41..95f08bc 100644
--- a/executor/common_bsd.h
+++ b/executor/common_bsd.h
@@ -51,8 +51,14 @@
 // Rest of the packet (if any) will be silently truncated which is fine.
 #define SYZ_TUN_MAX_PACKET_SIZE 1000
 
+#if GOOS_netbsd
+// Increased number of tap and tun devices if image script is used
+#define MAX_TUN 64
+
+#else
 // Maximum number of tun devices in the default install.
 #define MAX_TUN 4
+#endif
 
 // All patterns are non-expanding given values < MAX_TUN.
 #define TUN_IFACE "tap%d"
diff --git a/executor/common_usb.h b/executor/common_usb.h
index 94d270b..6e18183 100644
--- a/executor/common_usb.h
+++ b/executor/common_usb.h
@@ -7,28 +7,33 @@
 
 #define USB_DEBUG 0
 
+#define USB_MAX_IFACE_NUM 4
 #define USB_MAX_EP_NUM 32
 
-struct usb_device_index {
-	struct usb_device_descriptor* dev;
-	struct usb_config_descriptor* config;
-	unsigned config_length;
+struct usb_iface_index {
 	struct usb_interface_descriptor* iface;
 	struct usb_endpoint_descriptor* eps[USB_MAX_EP_NUM];
 	unsigned eps_num;
 };
 
+struct usb_device_index {
+	struct usb_device_descriptor* dev;
+	struct usb_config_descriptor* config;
+	unsigned config_length;
+	struct usb_iface_index ifaces[USB_MAX_IFACE_NUM];
+	unsigned ifaces_num;
+};
+
 static bool parse_usb_descriptor(char* buffer, size_t length, struct usb_device_index* index)
 {
-	if (length < sizeof(*index->dev) + sizeof(*index->config) + sizeof(*index->iface))
+	if (length < sizeof(*index->dev) + sizeof(*index->config))
 		return false;
 
+	memset(index, 0, sizeof(*index));
+
 	index->dev = (struct usb_device_descriptor*)buffer;
 	index->config = (struct usb_config_descriptor*)(buffer + sizeof(*index->dev));
 	index->config_length = length - sizeof(*index->dev);
-	index->iface = (struct usb_interface_descriptor*)(buffer + sizeof(*index->dev) + sizeof(*index->config));
-
-	index->eps_num = 0;
 	size_t offset = 0;
 
 	while (true) {
@@ -40,12 +45,18 @@
 			break;
 		if (offset + desc_length > length)
 			break;
-		if (desc_type == USB_DT_ENDPOINT) {
-			index->eps[index->eps_num] = (struct usb_endpoint_descriptor*)(buffer + offset);
-			index->eps_num++;
+		if (desc_type == USB_DT_INTERFACE && index->ifaces_num < USB_MAX_IFACE_NUM) {
+			struct usb_interface_descriptor* iface = (struct usb_interface_descriptor*)(buffer + offset);
+			debug("parse_usb_descriptor: found interface #%u (%d, %d) at %p\n",
+			      index->ifaces_num, iface->bInterfaceNumber, iface->bAlternateSetting, iface);
+			index->ifaces[index->ifaces_num++].iface = iface;
 		}
-		if (index->eps_num == USB_MAX_EP_NUM)
-			break;
+		if (desc_type == USB_DT_ENDPOINT && index->ifaces_num > 0) {
+			struct usb_iface_index* iface = &index->ifaces[index->ifaces_num - 1];
+			debug("parse_usb_descriptor: found endpoint #%u at %p\n", iface->eps_num, buffer + offset);
+			if (iface->eps_num < USB_MAX_EP_NUM)
+				iface->eps[iface->eps_num++] = (struct usb_endpoint_descriptor*)(buffer + offset);
+		}
 		offset += desc_length;
 	}
 
@@ -177,7 +188,15 @@
 	struct vusb_connect_string_descriptor strs[0];
 } __attribute__((packed));
 
-static const char* default_string = "syzkaller";
+static const char default_string[] = {
+    8, USB_DT_STRING,
+    's', 0, 'y', 0, 'z', 0 // UTF16-encoded "syz"
+};
+
+static const char default_lang_id[] = {
+    4, USB_DT_STRING,
+    0x09, 0x04 // English (United States)
+};
 
 static bool lookup_connect_response(struct vusb_connect_descriptors* descs, struct usb_device_index* index,
 				    struct usb_ctrlrequest* ctrl, char** response_data, uint32* response_length)
@@ -199,14 +218,18 @@
 				return true;
 			case USB_DT_STRING:
 				str_idx = (uint8)ctrl->wValue;
-				if (str_idx >= descs->strs_len) {
-					// Use the default string if we ran out.
-					*response_data = (char*)default_string;
-					*response_length = strlen(default_string);
-				} else {
+				if (descs && str_idx < descs->strs_len) {
 					*response_data = descs->strs[str_idx].str;
 					*response_length = descs->strs[str_idx].len;
+					return true;
 				}
+				if (str_idx == 0) {
+					*response_data = (char*)&default_lang_id[0];
+					*response_length = default_lang_id[0];
+					return true;
+				}
+				*response_data = (char*)&default_string[0];
+				*response_length = default_string[0];
 				return true;
 			case USB_DT_BOS:
 				*response_data = descs->bos;
@@ -217,17 +240,17 @@
 				*response_length = descs->qual_len;
 				return true;
 			default:
-				fail("syz_usb_connect: no response");
+				fail("lookup_connect_response: no response");
 				return false;
 			}
 			break;
 		default:
-			fail("syz_usb_connect: no response");
+			fail("lookup_connect_response: no response");
 			return false;
 		}
 		break;
 	default:
-		fail("syz_usb_connect: no response");
+		fail("lookup_connect_response: no response");
 		return false;
 	}
 
@@ -258,7 +281,7 @@
 		debug("syz_usb_connect: parse_usb_descriptor failed with %d\n", rv);
 		return rv;
 	}
-	debug("syz_usb_connect: parsed usb descriptor, %d endpoints found\n", index.eps_num);
+	debug("syz_usb_connect: parsed usb descriptor\n");
 
 	int fd = usb_fuzzer_open();
 	if (fd < 0) {
@@ -298,7 +321,7 @@
 		if (event.inner.type != USB_FUZZER_EVENT_CONTROL)
 			continue;
 
-		debug("syz_usb_connect: bRequestType: 0x%x (%s), bRequest: 0x%x, wValue: 0x%x, wIndex: 0x%x, wLength: %d\n",
+		debug("syz_usb_connect: bReqType: 0x%x (%s), bReq: 0x%x, wVal: 0x%x, wIdx: 0x%x, wLen: %d\n",
 		      event.ctrl.bRequestType, (event.ctrl.bRequestType & USB_DIR_IN) ? "IN" : "OUT",
 		      event.ctrl.bRequest, event.ctrl.wValue, event.ctrl.wIndex, event.ctrl.wLength);
 
@@ -333,10 +356,10 @@
 				return rv;
 			}
 			unsigned ep;
-			for (ep = 0; ep < index.eps_num; ep++) {
-				rv = usb_fuzzer_ep_enable(fd, index.eps[ep]);
+			for (ep = 0; ep < index.ifaces[0].eps_num; ep++) {
+				rv = usb_fuzzer_ep_enable(fd, index.ifaces[0].eps[ep]);
 				if (rv < 0) {
-					debug("syz_usb_connect: usb_fuzzer_ep_enable failed with %d\n", rv);
+					debug("syz_usb_connect: usb_fuzzer_ep_enable(%d) failed with %d\n", ep, rv);
 				} else {
 					debug("syz_usb_connect: endpoint %d enabled\n", ep);
 				}
@@ -356,11 +379,14 @@
 		else
 			memset(&response.data[0], 0, response_length);
 
-		debug("syz_usb_connect: reply length = %d\n", response.inner.length);
-		if (event.ctrl.bRequestType & USB_DIR_IN)
+		if (event.ctrl.bRequestType & USB_DIR_IN) {
+			debug("syz_usb_connect: writing %d bytes\n", response.inner.length);
 			rv = usb_fuzzer_ep0_write(fd, (struct usb_fuzzer_ep_io*)&response);
-		else
+		} else {
 			rv = usb_fuzzer_ep0_read(fd, (struct usb_fuzzer_ep_io*)&response);
+			debug("syz_usb_connect: read %d bytes\n", response.inner.length);
+			debug_dump_data(&event.data[0], response.inner.length);
+		}
 		if (rv < 0) {
 			debug("syz_usb_connect: usb_fuzzer_ep0_read/write failed with %d\n", rv);
 			return rv;
@@ -404,8 +430,13 @@
 static bool lookup_control_response(struct vusb_descriptors* descs, struct vusb_responses* resps,
 				    struct usb_ctrlrequest* ctrl, char** response_data, uint32* response_length)
 {
-	int descs_num = (descs->len - offsetof(struct vusb_descriptors, descs)) / sizeof(descs->descs[0]);
-	int resps_num = (resps->len - offsetof(struct vusb_responses, resps)) / sizeof(resps->resps[0]);
+	int descs_num = 0;
+	int resps_num = 0;
+
+	if (descs)
+		descs_num = (descs->len - offsetof(struct vusb_descriptors, descs)) / sizeof(descs->descs[0]);
+	if (resps)
+		resps_num = (resps->len - offsetof(struct vusb_responses, resps)) / sizeof(resps->resps[0]);
 
 	uint8 req = ctrl->bRequest;
 	uint8 req_type = ctrl->bRequestType & USB_TYPE_MASK;
@@ -428,7 +459,7 @@
 			}
 		}
 
-		if (descs->generic) {
+		if (descs && descs->generic) {
 			*response_data = &descs->generic->data[0];
 			*response_length = descs->generic->len;
 			return true;
@@ -450,7 +481,7 @@
 			}
 		}
 
-		if (resps->generic) {
+		if (resps && resps->generic) {
 			*response_data = &resps->generic->data[0];
 			*response_length = resps->generic->len;
 			return true;
@@ -517,7 +548,7 @@
 		return -1;
 	}
 
-	debug("syz_usb_control_io: bRequestType: 0x%x (%s), bRequest: 0x%x, wValue: 0x%x, wIndex: 0x%x, wLength: %d\n",
+	debug("syz_usb_control_io: bReqType: 0x%x (%s), bReq: 0x%x, wVal: 0x%x, wIdx: 0x%x, wLen: %d\n",
 	      event.ctrl.bRequestType, (event.ctrl.bRequestType & USB_DIR_IN) ? "IN" : "OUT",
 	      event.ctrl.bRequest, event.ctrl.wValue, event.ctrl.wIndex, event.ctrl.wLength);
 
@@ -552,12 +583,12 @@
 		memset(&response.data[0], 0, response_length);
 
 	if (event.ctrl.bRequestType & USB_DIR_IN) {
-		debug("syz_usb_control_io: IN, length = %d\n", response.inner.length);
+		debug("syz_usb_control_io: writing %d bytes\n", response.inner.length);
 		debug_dump_data(&response.data[0], response.inner.length);
 		rv = usb_fuzzer_ep0_write(fd, (struct usb_fuzzer_ep_io*)&response);
 	} else {
 		rv = usb_fuzzer_ep0_read(fd, (struct usb_fuzzer_ep_io*)&response);
-		debug("syz_usb_control_io: OUT, length = %d\n", response.inner.length);
+		debug("syz_usb_control_io: read %d bytes\n", response.inner.length);
 		debug_dump_data(&event.data[0], response.inner.length);
 	}
 	if (rv < 0) {
diff --git a/executor/defs.h b/executor/defs.h
index 9cedad6..47c9d02 100644
--- a/executor/defs.h
+++ b/executor/defs.h
@@ -45,7 +45,7 @@
 
 #if GOARCH_amd64
 #define GOARCH "amd64"
-#define SYZ_REVISION "0831ecb34bc4bfd3c444366782fdbd3fafe56026"
+#define SYZ_REVISION "f0ef39210d9bc1961aa7d4b3cbb065e1e1e3824b"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 0
 #define SYZ_EXECUTOR_USES_SHMEM 0
 #define SYZ_PAGE_SIZE 4096
@@ -55,7 +55,7 @@
 
 #if GOARCH_arm64
 #define GOARCH "arm64"
-#define SYZ_REVISION "b643855d1cb7438abcacb87d29a4dfdd49961397"
+#define SYZ_REVISION "6a8f950f7eee2c03aa38625f64563d19c3548436"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 0
 #define SYZ_EXECUTOR_USES_SHMEM 0
 #define SYZ_PAGE_SIZE 4096
@@ -70,7 +70,7 @@
 
 #if GOARCH_386
 #define GOARCH "386"
-#define SYZ_REVISION "eb22b8a389910e3ec878475738f280bd61b00a09"
+#define SYZ_REVISION "6c600dc9e424904f3bf19b9e8ade5a7d397827a9"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 1
 #define SYZ_EXECUTOR_USES_SHMEM 1
 #define SYZ_PAGE_SIZE 4096
@@ -80,7 +80,7 @@
 
 #if GOARCH_amd64
 #define GOARCH "amd64"
-#define SYZ_REVISION "b025d70b7713cc48e9ab783fc35e2410b69a5736"
+#define SYZ_REVISION "e8d337b13b9ae8f911b772c9be47236bc8446da4"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 1
 #define SYZ_EXECUTOR_USES_SHMEM 1
 #define SYZ_PAGE_SIZE 4096
@@ -90,7 +90,7 @@
 
 #if GOARCH_arm
 #define GOARCH "arm"
-#define SYZ_REVISION "fdb9cb5b71481f79ff86d824721def50b72fafa5"
+#define SYZ_REVISION "c0010b3d05cb5d0ca1af17dacf9349c9cdf38c9e"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 1
 #define SYZ_EXECUTOR_USES_SHMEM 1
 #define SYZ_PAGE_SIZE 4096
@@ -100,7 +100,7 @@
 
 #if GOARCH_arm64
 #define GOARCH "arm64"
-#define SYZ_REVISION "26a51558327902a8e8951bd6afdcdae046006802"
+#define SYZ_REVISION "ace614dc3bdc1ab3e0dfe5514e2718cdd818e071"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 1
 #define SYZ_EXECUTOR_USES_SHMEM 1
 #define SYZ_PAGE_SIZE 4096
@@ -110,7 +110,7 @@
 
 #if GOARCH_ppc64le
 #define GOARCH "ppc64le"
-#define SYZ_REVISION "d118414cc10f2c07b6a9e1fae0e14db998375343"
+#define SYZ_REVISION "a3c972567317d3e84a2e833c05a73c8218815ee9"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 1
 #define SYZ_EXECUTOR_USES_SHMEM 1
 #define SYZ_PAGE_SIZE 4096
@@ -140,7 +140,7 @@
 
 #if GOARCH_amd64
 #define GOARCH "amd64"
-#define SYZ_REVISION "33de16487cc0a0d25eaa32ea4166bbbc75d2994e"
+#define SYZ_REVISION "eee7ba72a578dfec4292538dd7a1fbe4e927d64f"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 1
 #define SYZ_EXECUTOR_USES_SHMEM 1
 #define SYZ_PAGE_SIZE 4096
@@ -175,7 +175,7 @@
 
 #if GOARCH_64
 #define GOARCH "64"
-#define SYZ_REVISION "8c0a50a6c63e5bd297e9f6421864685e1fd7dc96"
+#define SYZ_REVISION "71d8f9a8f2ed06129920bb9f60aef16fb9ca749b"
 #define SYZ_EXECUTOR_USES_FORK_SERVER 0
 #define SYZ_EXECUTOR_USES_SHMEM 0
 #define SYZ_PAGE_SIZE 4096
diff --git a/executor/syscalls.h b/executor/syscalls.h
index a4cfbe1..bbdd804 100644
--- a/executor/syscalls.h
+++ b/executor/syscalls.h
@@ -1267,7 +1267,6 @@
     {"fdio_service_connect$fuchsia_ldsvc_Loader", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_Connectivity", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_NameLookup", 0, (syscall_t)fdio_service_connect},
-    {"fdio_service_connect$fuchsia_net_SocketControl", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_SocketProvider", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_stack_Stack", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_process_Launcher", 0, (syscall_t)fdio_service_connect},
@@ -1449,18 +1448,7 @@
     {"zx_channel_call$fuchsia_ldsvc_LoaderLoadScriptInterpreter", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_NameLookupLookupHostname", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_NameLookupLookupIp", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlAccept", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlBind", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlClose", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlConnect", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlGetPeerName", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlGetSockName", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlGetSockOpt", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlIoctl", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlListen", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlSetSockOpt", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_SocketProviderGetAddrInfo", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketProviderSocket", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_stack_StackAddEthernetInterface", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_stack_StackAddForwardingEntry", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_stack_StackAddInterfaceAddress", 0, (syscall_t)zx_channel_call},
@@ -1501,7 +1489,6 @@
     {"zx_channel_create$fuchsia_ldsvc_Loader", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_Connectivity", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_NameLookup", 0, (syscall_t)zx_channel_create},
-    {"zx_channel_create$fuchsia_net_SocketControl", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_SocketProvider", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_stack_Stack", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_process_Launcher", 0, (syscall_t)zx_channel_create},
@@ -1601,10 +1588,8 @@
     {"zx_process_exit", 0, (syscall_t)zx_process_exit},
     {"zx_process_read_memory", 0, (syscall_t)zx_process_read_memory},
     {"zx_process_start", 0, (syscall_t)zx_process_start},
-    {"zx_socket_accept", 0, (syscall_t)zx_socket_accept},
     {"zx_socket_create", 0, (syscall_t)zx_socket_create},
     {"zx_socket_read", 0, (syscall_t)zx_socket_read},
-    {"zx_socket_share", 0, (syscall_t)zx_socket_share},
     {"zx_socket_shutdown", 0, (syscall_t)zx_socket_shutdown},
     {"zx_socket_write", 0, (syscall_t)zx_socket_write},
     {"zx_system_get_num_cpus", 0, (syscall_t)zx_system_get_num_cpus},
@@ -1687,7 +1672,6 @@
     {"fdio_service_connect$fuchsia_ldsvc_Loader", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_Connectivity", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_NameLookup", 0, (syscall_t)fdio_service_connect},
-    {"fdio_service_connect$fuchsia_net_SocketControl", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_SocketProvider", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_net_stack_Stack", 0, (syscall_t)fdio_service_connect},
     {"fdio_service_connect$fuchsia_process_Launcher", 0, (syscall_t)fdio_service_connect},
@@ -1869,18 +1853,7 @@
     {"zx_channel_call$fuchsia_ldsvc_LoaderLoadScriptInterpreter", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_NameLookupLookupHostname", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_NameLookupLookupIp", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlAccept", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlBind", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlClose", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlConnect", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlGetPeerName", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlGetSockName", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlGetSockOpt", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlIoctl", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlListen", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketControlSetSockOpt", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_SocketProviderGetAddrInfo", 0, (syscall_t)zx_channel_call},
-    {"zx_channel_call$fuchsia_net_SocketProviderSocket", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_stack_StackAddEthernetInterface", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_stack_StackAddForwardingEntry", 0, (syscall_t)zx_channel_call},
     {"zx_channel_call$fuchsia_net_stack_StackAddInterfaceAddress", 0, (syscall_t)zx_channel_call},
@@ -1921,7 +1894,6 @@
     {"zx_channel_create$fuchsia_ldsvc_Loader", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_Connectivity", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_NameLookup", 0, (syscall_t)zx_channel_create},
-    {"zx_channel_create$fuchsia_net_SocketControl", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_SocketProvider", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_net_stack_Stack", 0, (syscall_t)zx_channel_create},
     {"zx_channel_create$fuchsia_process_Launcher", 0, (syscall_t)zx_channel_create},
@@ -2021,10 +1993,8 @@
     {"zx_process_exit", 0, (syscall_t)zx_process_exit},
     {"zx_process_read_memory", 0, (syscall_t)zx_process_read_memory},
     {"zx_process_start", 0, (syscall_t)zx_process_start},
-    {"zx_socket_accept", 0, (syscall_t)zx_socket_accept},
     {"zx_socket_create", 0, (syscall_t)zx_socket_create},
     {"zx_socket_read", 0, (syscall_t)zx_socket_read},
-    {"zx_socket_share", 0, (syscall_t)zx_socket_share},
     {"zx_socket_shutdown", 0, (syscall_t)zx_socket_shutdown},
     {"zx_socket_write", 0, (syscall_t)zx_socket_write},
     {"zx_system_get_num_cpus", 0, (syscall_t)zx_system_get_num_cpus},
@@ -3932,6 +3902,7 @@
     {"read", 3},
     {"read$FUSE", 3},
     {"read$alg", 3},
+    {"read$char_usb", 3},
     {"read$eventfd", 3},
     {"read$hiddev", 3},
     {"read$hidraw", 3},
@@ -4561,6 +4532,7 @@
     {"syz_open_dev$audion", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$binder", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$cec", 0, (syscall_t)syz_open_dev},
+    {"syz_open_dev$char_usb", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dmmidi", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dri", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dricontrol", 0, (syscall_t)syz_open_dev},
@@ -4603,9 +4575,13 @@
     {"syz_open_pts", 0, (syscall_t)syz_open_pts},
     {"syz_read_part_table", 0, (syscall_t)syz_read_part_table},
     {"syz_usb_connect", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ecm", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ncm", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$hid", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$printer", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_control_io", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ecm", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ncm", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$hid", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$printer", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_disconnect", 0, (syscall_t)syz_usb_disconnect},
@@ -4790,6 +4766,7 @@
     {"write$cgroup_pid", 4},
     {"write$cgroup_subtree", 4},
     {"write$cgroup_type", 4},
+    {"write$char_usb", 4},
     {"write$evdev", 4},
     {"write$eventfd", 4},
     {"write$hidraw", 4},
@@ -6691,6 +6668,7 @@
     {"read", 0},
     {"read$FUSE", 0},
     {"read$alg", 0},
+    {"read$char_usb", 0},
     {"read$eventfd", 0},
     {"read$hiddev", 0},
     {"read$hidraw", 0},
@@ -7321,6 +7299,7 @@
     {"syz_open_dev$audion", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$binder", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$cec", 0, (syscall_t)syz_open_dev},
+    {"syz_open_dev$char_usb", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dmmidi", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dri", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dricontrol", 0, (syscall_t)syz_open_dev},
@@ -7363,9 +7342,13 @@
     {"syz_open_pts", 0, (syscall_t)syz_open_pts},
     {"syz_read_part_table", 0, (syscall_t)syz_read_part_table},
     {"syz_usb_connect", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ecm", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ncm", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$hid", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$printer", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_control_io", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ecm", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ncm", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$hid", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$printer", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_disconnect", 0, (syscall_t)syz_usb_disconnect},
@@ -7550,6 +7533,7 @@
     {"write$cgroup_pid", 1},
     {"write$cgroup_subtree", 1},
     {"write$cgroup_type", 1},
+    {"write$char_usb", 1},
     {"write$evdev", 1},
     {"write$eventfd", 1},
     {"write$hidraw", 1},
@@ -9405,6 +9389,7 @@
     {"read", 3},
     {"read$FUSE", 3},
     {"read$alg", 3},
+    {"read$char_usb", 3},
     {"read$eventfd", 3},
     {"read$hiddev", 3},
     {"read$hidraw", 3},
@@ -10033,6 +10018,7 @@
     {"syz_open_dev$audion", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$binder", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$cec", 0, (syscall_t)syz_open_dev},
+    {"syz_open_dev$char_usb", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dmmidi", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dri", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dricontrol", 0, (syscall_t)syz_open_dev},
@@ -10075,9 +10061,13 @@
     {"syz_open_pts", 0, (syscall_t)syz_open_pts},
     {"syz_read_part_table", 0, (syscall_t)syz_read_part_table},
     {"syz_usb_connect", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ecm", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ncm", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$hid", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$printer", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_control_io", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ecm", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ncm", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$hid", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$printer", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_disconnect", 0, (syscall_t)syz_usb_disconnect},
@@ -10260,6 +10250,7 @@
     {"write$cgroup_pid", 4},
     {"write$cgroup_subtree", 4},
     {"write$cgroup_type", 4},
+    {"write$char_usb", 4},
     {"write$evdev", 4},
     {"write$eventfd", 4},
     {"write$hidraw", 4},
@@ -12100,6 +12091,7 @@
     {"read", 63},
     {"read$FUSE", 63},
     {"read$alg", 63},
+    {"read$char_usb", 63},
     {"read$eventfd", 63},
     {"read$hiddev", 63},
     {"read$hidraw", 63},
@@ -12719,6 +12711,7 @@
     {"syz_open_dev$audion", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$binder", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$cec", 0, (syscall_t)syz_open_dev},
+    {"syz_open_dev$char_usb", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dmmidi", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dri", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dricontrol", 0, (syscall_t)syz_open_dev},
@@ -12761,9 +12754,13 @@
     {"syz_open_pts", 0, (syscall_t)syz_open_pts},
     {"syz_read_part_table", 0, (syscall_t)syz_read_part_table},
     {"syz_usb_connect", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ecm", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ncm", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$hid", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$printer", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_control_io", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ecm", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ncm", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$hid", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$printer", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_disconnect", 0, (syscall_t)syz_usb_disconnect},
@@ -12942,6 +12939,7 @@
     {"write$cgroup_pid", 64},
     {"write$cgroup_subtree", 64},
     {"write$cgroup_type", 64},
+    {"write$char_usb", 64},
     {"write$evdev", 64},
     {"write$eventfd", 64},
     {"write$hidraw", 64},
@@ -14796,6 +14794,7 @@
     {"read", 3},
     {"read$FUSE", 3},
     {"read$alg", 3},
+    {"read$char_usb", 3},
     {"read$eventfd", 3},
     {"read$hiddev", 3},
     {"read$hidraw", 3},
@@ -15423,6 +15422,7 @@
     {"syz_open_dev$audion", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$binder", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$cec", 0, (syscall_t)syz_open_dev},
+    {"syz_open_dev$char_usb", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dmmidi", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dri", 0, (syscall_t)syz_open_dev},
     {"syz_open_dev$dricontrol", 0, (syscall_t)syz_open_dev},
@@ -15465,9 +15465,13 @@
     {"syz_open_pts", 0, (syscall_t)syz_open_pts},
     {"syz_read_part_table", 0, (syscall_t)syz_read_part_table},
     {"syz_usb_connect", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ecm", 0, (syscall_t)syz_usb_connect},
+    {"syz_usb_connect$cdc_ncm", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$hid", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_connect$printer", 0, (syscall_t)syz_usb_connect},
     {"syz_usb_control_io", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ecm", 0, (syscall_t)syz_usb_control_io},
+    {"syz_usb_control_io$cdc_ncm", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$hid", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_control_io$printer", 0, (syscall_t)syz_usb_control_io},
     {"syz_usb_disconnect", 0, (syscall_t)syz_usb_disconnect},
@@ -15652,6 +15656,7 @@
     {"write$cgroup_pid", 4},
     {"write$cgroup_subtree", 4},
     {"write$cgroup_type", 4},
+    {"write$char_usb", 4},
     {"write$evdev", 4},
     {"write$eventfd", 4},
     {"write$hidraw", 4},
@@ -15917,6 +15922,7 @@
     {"accept$inet", 30},
     {"accept$inet6", 30},
     {"accept$unix", 30},
+    {"acct", 51},
     {"bind", 104},
     {"bind$inet", 104},
     {"bind$inet6", 104},
@@ -16025,6 +16031,8 @@
     {"ioctl$PCIOCGETROM", 54},
     {"ioctl$PCIOCREAD", 54},
     {"ioctl$PCIOCWRITE", 54},
+    {"ioctl$SPKRTONE", 54},
+    {"ioctl$SPKRTUNE", 54},
     {"ioctl$TIOCCBRK", 54},
     {"ioctl$TIOCCDTR", 54},
     {"ioctl$TIOCCHKVERAUTH", 54},
@@ -16108,6 +16116,7 @@
     {"ioctl$WSMUXIO_REMOVE_DEVICE", 54},
     {"kevent", 72},
     {"kqueue", 269},
+    {"ktrace", 45},
     {"lchown", 254},
     {"link", 9},
     {"linkat", 317},
@@ -16144,6 +16153,7 @@
     {"openat$klog", 321},
     {"openat$null", 321},
     {"openat$pci", 321},
+    {"openat$speaker", 321},
     {"openat$tty", 321},
     {"openat$vmm", 321},
     {"openat$wsdisplay", 321},
@@ -16296,6 +16306,14 @@
     {"foo$fmt4", 0},
     {"foo$fmt5", 0},
     {"minimize$0", 0},
+    {"mutate$array", 0},
+    {"mutate$array2", 0},
+    {"mutate$flags", 0},
+    {"mutate$flags2", 0},
+    {"mutate$flags3", 0},
+    {"mutate$integer", 0},
+    {"mutate$integer2", 0},
+    {"mutate$union", 0},
     {"mutate0", 0},
     {"mutate1", 0},
     {"mutate2", 0},
diff --git a/fuzzit.sh b/fuzzit.sh
index 61a68ef..7079658 100755
--- a/fuzzit.sh
+++ b/fuzzit.sh
@@ -2,6 +2,7 @@
 # Copyright 2019 syzkaller project authors. All rights reserved.
 # Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
 
+
 # Helper script for working with fuzzit.dev
 # https://github.com/fuzzitdev/example-go
 
@@ -10,16 +11,21 @@
 function target {
 	go-fuzz-build -libfuzzer -func $3 -o fuzzer.a $2
 	clang -fsanitize=fuzzer fuzzer.a -o fuzzer
-	./fuzzit create job --type fuzzing --branch $TRAVIS_BRANCH --revision $TRAVIS_COMMIT $1 ./fuzzer
+	./fuzzit create job $LOCAL --type fuzzing --branch $TRAVIS_BRANCH --revision $TRAVIS_COMMIT syzkaller/$1 ./fuzzer
 }
 
 go get -u github.com/dvyukov/go-fuzz/go-fuzz-build
-wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v1.2.7/fuzzit_Linux_x86_64
+wget -q -O fuzzit https://github.com/fuzzitdev/fuzzit/releases/download/v2.4.12/fuzzit_Linux_x86_64
 chmod a+x fuzzit
-./fuzzit auth ${FUZZIT_API_KEY}
+if [ "$1" = "fuzzing" ]; then
+    ./fuzzit auth ${FUZZIT_API_KEY}
+    export LOCAL=""
+else
+    export LOCAL="--local"
+fi
 
-target QOmcj5QL4FVtUWV2UmhG ./prog/test FuzzDeserialize
-target ddurE2yrDlqpklLYgNc6 ./prog/test FuzzParseLog
-target 4A7DVc22Gni7tUtZBc19 ./pkg/compiler Fuzz
-target YMCIxz61XkKWaB4jmiS5 ./pkg/report Fuzz
-target 1d75bUDf9zNQz1HgHyM0 ./tools/syz-trace2syz/proggen Fuzz
+target syzkaller-prog-deserialize ./prog/test FuzzDeserialize
+target syzkaller-prog-parselog ./prog/test FuzzParseLog
+target syzkaller-compiler ./pkg/compiler Fuzz
+target syzkaller-report ./pkg/report Fuzz
+target syzkaller-trace2syz ./tools/syz-trace2syz/proggen Fuzz
diff --git a/pkg/build/fuchsia.go b/pkg/build/fuchsia.go
index 850d029..a1bff91 100644
--- a/pkg/build/fuchsia.go
+++ b/pkg/build/fuchsia.go
@@ -14,6 +14,15 @@
 
 type fuchsia struct{}
 
+func runSandboxed(timeout time.Duration, dir, command string, arg ...string) ([]byte, error) {
+	cmd := osutil.Command(command, arg...)
+	cmd.Dir = dir
+	if err := osutil.Sandbox(cmd, true, false); err != nil {
+		return nil, err
+	}
+	return osutil.Run(timeout, cmd)
+}
+
 func (fu fuchsia) build(targetArch, vmType, kernelDir, outputDir, compiler, userspaceDir,
 	cmdlineFile, sysctlFile string, config []byte) error {
 	sysTarget := targets.Get("fuchsia", targetArch)
@@ -22,11 +31,11 @@
 	}
 	arch := sysTarget.KernelHeaderArch
 	product := fmt.Sprintf("%s.%s", "core", arch)
-	if _, err := osutil.RunCmd(time.Hour, kernelDir, "scripts/fx", "--dir", "out/"+arch,
+	if _, err := runSandboxed(time.Hour, kernelDir, "scripts/fx", "--dir", "out/"+arch,
 		"set", product, "--with-base", "//bundles:tools"); err != nil {
 		return err
 	}
-	if _, err := osutil.RunCmd(time.Hour, kernelDir, "scripts/fx", "clean-build"); err != nil {
+	if _, err := runSandboxed(time.Hour*2, kernelDir, "scripts/fx", "clean-build"); err != nil {
 		return err
 	}
 
@@ -34,7 +43,7 @@
 	sshZBI := filepath.Join(kernelDir, "out", arch, "fuchsia-ssh.zbi")
 	kernelZBI := filepath.Join(kernelDir, "out", arch, "fuchsia.zbi")
 	authorizedKeys := fmt.Sprintf("data/ssh/authorized_keys=%s", filepath.Join(kernelDir, ".ssh", "authorized_keys"))
-	if _, err := osutil.RunCmd(time.Minute, kernelDir, "out/"+arch+".zircon/tools/zbi",
+	if _, err := runSandboxed(time.Minute, kernelDir, "out/"+arch+".zircon/tools/zbi",
 		"-o", sshZBI, kernelZBI, "--entry", authorizedKeys); err != nil {
 		return err
 	}
diff --git a/pkg/build/linux.go b/pkg/build/linux.go
index c565957..3c1051f 100644
--- a/pkg/build/linux.go
+++ b/pkg/build/linux.go
@@ -15,7 +15,6 @@
 	"os"
 	"path/filepath"
 	"runtime"
-	"strconv"
 	"time"
 
 	"github.com/google/syzkaller/pkg/osutil"
@@ -46,12 +45,7 @@
 	// One would expect olddefconfig here, but olddefconfig is not present in v3.6 and below.
 	// oldconfig is the same as olddefconfig if stdin is not set.
 	// Note: passing in compiler is important since 4.17 (at the very least it's noted in the config).
-	cmd := osutil.Command("make", "oldconfig", "CC="+compiler)
-	if err := osutil.Sandbox(cmd, true, true); err != nil {
-		return err
-	}
-	cmd.Dir = kernelDir
-	if _, err := osutil.Run(10*time.Minute, cmd); err != nil {
+	if err := runMake(kernelDir, "oldconfig", "CC="+compiler); err != nil {
 		return err
 	}
 	// Write updated kernel config early, so that it's captured on build failures.
@@ -60,8 +54,6 @@
 		return err
 	}
 	// We build only zImage/bzImage as we currently don't use modules.
-	cpu := strconv.Itoa(runtime.NumCPU())
-
 	var target string
 	switch targetArch {
 	case "386", "amd64":
@@ -69,13 +61,7 @@
 	case "ppc64le":
 		target = "zImage"
 	}
-	cmd = osutil.Command("make", target, "-j", cpu, "CC="+compiler)
-
-	if err := osutil.Sandbox(cmd, true, true); err != nil {
-		return err
-	}
-	cmd.Dir = kernelDir
-	if _, err := osutil.Run(time.Hour, cmd); err != nil {
+	if err := runMake(kernelDir, target, "CC="+compiler); err != nil {
 		return err
 	}
 	vmlinux := filepath.Join(kernelDir, "vmlinux")
@@ -132,12 +118,26 @@
 }
 
 func (linux) clean(kernelDir, targetArch string) error {
-	cpu := strconv.Itoa(runtime.NumCPU())
-	cmd := osutil.Command("make", "distclean", "-j", cpu)
+	return runMake(kernelDir, "distclean")
+}
+
+func runMake(kernelDir string, args ...string) error {
+	args = append(args, fmt.Sprintf("-j%v", runtime.NumCPU()))
+	cmd := osutil.Command("make", args...)
 	if err := osutil.Sandbox(cmd, true, true); err != nil {
 		return err
 	}
 	cmd.Dir = kernelDir
-	_, err := osutil.Run(10*time.Minute, cmd)
+	cmd.Env = append([]string{}, os.Environ()...)
+	// This makes the build [more] deterministic:
+	// 2 builds from the same sources should result in the same vmlinux binary.
+	// We plan to use it for detecting no-op changes during bisection.
+	cmd.Env = append(cmd.Env,
+		"KBUILD_BUILD_VERSION=0",
+		"KBUILD_BUILD_TIMESTAMP=now",
+		"KBUILD_BUILD_USER=syzkaller",
+		"KBUILD_BUILD_HOST=syzkaller",
+	)
+	_, err := osutil.Run(time.Hour, cmd)
 	return err
 }
diff --git a/pkg/compiler/check.go b/pkg/compiler/check.go
index 24acfe5..eb57228 100644
--- a/pkg/compiler/check.go
+++ b/pkg/compiler/check.go
@@ -940,6 +940,7 @@
 	for i, param := range params {
 		argMap[param.Name] = args[i]
 	}
+	argUsed := make(map[string]bool)
 	err0 := comp.errors
 	templ.Walk(ast.Recursive(func(n ast.Node) {
 		templArg, ok := n.(*ast.Type)
@@ -947,6 +948,7 @@
 			return
 		}
 		if concreteArg := argMap[templArg.Ident]; concreteArg != nil {
+			argUsed[templArg.Ident] = true
 			origArgs := templArg.Args
 			if len(origArgs) != 0 && len(concreteArg.Args) != 0 {
 				comp.error(templArg.Pos, "both template parameter %v and its usage"+
@@ -965,11 +967,18 @@
 		if len(templArg.Colon) != 0 {
 			col := templArg.Colon[0]
 			if concreteArg := argMap[col.Ident]; concreteArg != nil {
+				argUsed[col.Ident] = true
 				col.Ident = concreteArg.Ident
 				col.Pos = concreteArg.Pos
 			}
 		}
 	}))
+	for _, param := range params {
+		if !argUsed[param.Name] {
+			comp.error(argMap[param.Name].Pos,
+				"template argument %v is not used", param.Name)
+		}
+	}
 	return err0 == comp.errors
 }
 
diff --git a/pkg/compiler/testdata/errors.txt b/pkg/compiler/testdata/errors.txt
index 8c44694..bd71822 100644
--- a/pkg/compiler/testdata/errors.txt
+++ b/pkg/compiler/testdata/errors.txt
@@ -298,7 +298,7 @@
 }
 
 type templ_struct2[A] {
-	f	B		### unknown type B
+	f	B
 }
 
 type templ_base0[TYPE] {
@@ -323,7 +323,7 @@
 foo$203(a type0[42])		### type type0 is not a template
 foo$204(a ptr[in, templ_struct0[42, int8]])
 foo$205(a ptr[in, templ_struct0[int8, int8]])
-foo$207(a ptr[in, templ_struct2[1]])
+foo$207(a ptr[in, templ_struct2[1]])		### template argument A is not used
 
 # fmt
 
diff --git a/pkg/csource/common.go b/pkg/csource/common.go
index 587c0f5..f4da50b 100644
--- a/pkg/csource/common.go
+++ b/pkg/csource/common.go
@@ -22,6 +22,7 @@
 	linux   = "linux"
 	freebsd = "freebsd"
 	openbsd = "openbsd"
+	netbsd  = "netbsd"
 
 	sandboxNone                = "none"
 	sandboxSetuid              = "setuid"
diff --git a/pkg/csource/generated.go b/pkg/csource/generated.go
index 6d77fc5..987dc01 100644
--- a/pkg/csource/generated.go
+++ b/pkg/csource/generated.go
@@ -35,7 +35,7 @@
 
 #if SYZ_EXECUTOR || SYZ_PROCS || SYZ_REPEAT && SYZ_ENABLE_CGROUPS ||         \
     SYZ_ENABLE_NETDEV || __NR_syz_mount_image || __NR_syz_read_part_table || \
-    __NR_syz_usb_connect || (GOOS_openbsd || GOOS_freebsd) && SYZ_TUN_ENABLE
+    __NR_syz_usb_connect || (GOOS_freebsd || GOOS_openbsd || GOOS_netbsd) && SYZ_TUN_ENABLE
 unsigned long long procid;
 #endif
 
@@ -152,6 +152,8 @@
 {
 #if SYZ_SANDBOX_ANDROID_UNTRUSTED_APP
 	char tmpdir_template[] = "/data/data/syzkaller/syzkaller.XXXXXX";
+#elif GOOS_fuchsia
+	char tmpdir_template[] = "/tmp/syzkaller.XXXXXX";
 #else
 	char tmpdir_template[] = "./syzkaller.XXXXXX";
 #endif
@@ -440,7 +442,13 @@
 
 static int tunfd = -1;
 #define SYZ_TUN_MAX_PACKET_SIZE 1000
+
+#if GOOS_netbsd
+#define MAX_TUN 64
+
+#else
 #define MAX_TUN 4
+#endif
 #define TUN_IFACE "tap%d"
 #define TUN_DEVICE "/dev/tap%d"
 
@@ -1747,28 +1755,33 @@
 
 #define USB_DEBUG 0
 
+#define USB_MAX_IFACE_NUM 4
 #define USB_MAX_EP_NUM 32
 
-struct usb_device_index {
-	struct usb_device_descriptor* dev;
-	struct usb_config_descriptor* config;
-	unsigned config_length;
+struct usb_iface_index {
 	struct usb_interface_descriptor* iface;
 	struct usb_endpoint_descriptor* eps[USB_MAX_EP_NUM];
 	unsigned eps_num;
 };
 
+struct usb_device_index {
+	struct usb_device_descriptor* dev;
+	struct usb_config_descriptor* config;
+	unsigned config_length;
+	struct usb_iface_index ifaces[USB_MAX_IFACE_NUM];
+	unsigned ifaces_num;
+};
+
 static bool parse_usb_descriptor(char* buffer, size_t length, struct usb_device_index* index)
 {
-	if (length < sizeof(*index->dev) + sizeof(*index->config) + sizeof(*index->iface))
+	if (length < sizeof(*index->dev) + sizeof(*index->config))
 		return false;
 
+	memset(index, 0, sizeof(*index));
+
 	index->dev = (struct usb_device_descriptor*)buffer;
 	index->config = (struct usb_config_descriptor*)(buffer + sizeof(*index->dev));
 	index->config_length = length - sizeof(*index->dev);
-	index->iface = (struct usb_interface_descriptor*)(buffer + sizeof(*index->dev) + sizeof(*index->config));
-
-	index->eps_num = 0;
 	size_t offset = 0;
 
 	while (true) {
@@ -1780,12 +1793,18 @@
 			break;
 		if (offset + desc_length > length)
 			break;
-		if (desc_type == USB_DT_ENDPOINT) {
-			index->eps[index->eps_num] = (struct usb_endpoint_descriptor*)(buffer + offset);
-			index->eps_num++;
+		if (desc_type == USB_DT_INTERFACE && index->ifaces_num < USB_MAX_IFACE_NUM) {
+			struct usb_interface_descriptor* iface = (struct usb_interface_descriptor*)(buffer + offset);
+			debug("parse_usb_descriptor: found interface #%u (%d, %d) at %p\n",
+			      index->ifaces_num, iface->bInterfaceNumber, iface->bAlternateSetting, iface);
+			index->ifaces[index->ifaces_num++].iface = iface;
 		}
-		if (index->eps_num == USB_MAX_EP_NUM)
-			break;
+		if (desc_type == USB_DT_ENDPOINT && index->ifaces_num > 0) {
+			struct usb_iface_index* iface = &index->ifaces[index->ifaces_num - 1];
+			debug("parse_usb_descriptor: found endpoint #%u at %p\n", iface->eps_num, buffer + offset);
+			if (iface->eps_num < USB_MAX_EP_NUM)
+				iface->eps[iface->eps_num++] = (struct usb_endpoint_descriptor*)(buffer + offset);
+		}
 		offset += desc_length;
 	}
 
@@ -1917,7 +1936,15 @@
 	struct vusb_connect_string_descriptor strs[0];
 } __attribute__((packed));
 
-static const char* default_string = "syzkaller";
+static const char default_string[] = {
+    8, USB_DT_STRING,
+    's', 0, 'y', 0, 'z', 0
+};
+
+static const char default_lang_id[] = {
+    4, USB_DT_STRING,
+    0x09, 0x04
+};
 
 static bool lookup_connect_response(struct vusb_connect_descriptors* descs, struct usb_device_index* index,
 				    struct usb_ctrlrequest* ctrl, char** response_data, uint32* response_length)
@@ -1939,13 +1966,18 @@
 				return true;
 			case USB_DT_STRING:
 				str_idx = (uint8)ctrl->wValue;
-				if (str_idx >= descs->strs_len) {
-					*response_data = (char*)default_string;
-					*response_length = strlen(default_string);
-				} else {
+				if (descs && str_idx < descs->strs_len) {
 					*response_data = descs->strs[str_idx].str;
 					*response_length = descs->strs[str_idx].len;
+					return true;
 				}
+				if (str_idx == 0) {
+					*response_data = (char*)&default_lang_id[0];
+					*response_length = default_lang_id[0];
+					return true;
+				}
+				*response_data = (char*)&default_string[0];
+				*response_length = default_string[0];
 				return true;
 			case USB_DT_BOS:
 				*response_data = descs->bos;
@@ -1956,17 +1988,17 @@
 				*response_length = descs->qual_len;
 				return true;
 			default:
-				fail("syz_usb_connect: no response");
+				fail("lookup_connect_response: no response");
 				return false;
 			}
 			break;
 		default:
-			fail("syz_usb_connect: no response");
+			fail("lookup_connect_response: no response");
 			return false;
 		}
 		break;
 	default:
-		fail("syz_usb_connect: no response");
+		fail("lookup_connect_response: no response");
 		return false;
 	}
 
@@ -1997,7 +2029,7 @@
 		debug("syz_usb_connect: parse_usb_descriptor failed with %d\n", rv);
 		return rv;
 	}
-	debug("syz_usb_connect: parsed usb descriptor, %d endpoints found\n", index.eps_num);
+	debug("syz_usb_connect: parsed usb descriptor\n");
 
 	int fd = usb_fuzzer_open();
 	if (fd < 0) {
@@ -2034,7 +2066,7 @@
 		if (event.inner.type != USB_FUZZER_EVENT_CONTROL)
 			continue;
 
-		debug("syz_usb_connect: bRequestType: 0x%x (%s), bRequest: 0x%x, wValue: 0x%x, wIndex: 0x%x, wLength: %d\n",
+		debug("syz_usb_connect: bReqType: 0x%x (%s), bReq: 0x%x, wVal: 0x%x, wIdx: 0x%x, wLen: %d\n",
 		      event.ctrl.bRequestType, (event.ctrl.bRequestType & USB_DIR_IN) ? "IN" : "OUT",
 		      event.ctrl.bRequest, event.ctrl.wValue, event.ctrl.wIndex, event.ctrl.wLength);
 
@@ -2069,10 +2101,10 @@
 				return rv;
 			}
 			unsigned ep;
-			for (ep = 0; ep < index.eps_num; ep++) {
-				rv = usb_fuzzer_ep_enable(fd, index.eps[ep]);
+			for (ep = 0; ep < index.ifaces[0].eps_num; ep++) {
+				rv = usb_fuzzer_ep_enable(fd, index.ifaces[0].eps[ep]);
 				if (rv < 0) {
-					debug("syz_usb_connect: usb_fuzzer_ep_enable failed with %d\n", rv);
+					debug("syz_usb_connect: usb_fuzzer_ep_enable(%d) failed with %d\n", ep, rv);
 				} else {
 					debug("syz_usb_connect: endpoint %d enabled\n", ep);
 				}
@@ -2092,11 +2124,14 @@
 		else
 			memset(&response.data[0], 0, response_length);
 
-		debug("syz_usb_connect: reply length = %d\n", response.inner.length);
-		if (event.ctrl.bRequestType & USB_DIR_IN)
+		if (event.ctrl.bRequestType & USB_DIR_IN) {
+			debug("syz_usb_connect: writing %d bytes\n", response.inner.length);
 			rv = usb_fuzzer_ep0_write(fd, (struct usb_fuzzer_ep_io*)&response);
-		else
+		} else {
 			rv = usb_fuzzer_ep0_read(fd, (struct usb_fuzzer_ep_io*)&response);
+			debug("syz_usb_connect: read %d bytes\n", response.inner.length);
+			debug_dump_data(&event.data[0], response.inner.length);
+		}
 		if (rv < 0) {
 			debug("syz_usb_connect: usb_fuzzer_ep0_read/write failed with %d\n", rv);
 			return rv;
@@ -2140,8 +2175,13 @@
 static bool lookup_control_response(struct vusb_descriptors* descs, struct vusb_responses* resps,
 				    struct usb_ctrlrequest* ctrl, char** response_data, uint32* response_length)
 {
-	int descs_num = (descs->len - offsetof(struct vusb_descriptors, descs)) / sizeof(descs->descs[0]);
-	int resps_num = (resps->len - offsetof(struct vusb_responses, resps)) / sizeof(resps->resps[0]);
+	int descs_num = 0;
+	int resps_num = 0;
+
+	if (descs)
+		descs_num = (descs->len - offsetof(struct vusb_descriptors, descs)) / sizeof(descs->descs[0]);
+	if (resps)
+		resps_num = (resps->len - offsetof(struct vusb_responses, resps)) / sizeof(resps->resps[0]);
 
 	uint8 req = ctrl->bRequest;
 	uint8 req_type = ctrl->bRequestType & USB_TYPE_MASK;
@@ -2164,7 +2204,7 @@
 			}
 		}
 
-		if (descs->generic) {
+		if (descs && descs->generic) {
 			*response_data = &descs->generic->data[0];
 			*response_length = descs->generic->len;
 			return true;
@@ -2186,7 +2226,7 @@
 			}
 		}
 
-		if (resps->generic) {
+		if (resps && resps->generic) {
 			*response_data = &resps->generic->data[0];
 			*response_length = resps->generic->len;
 			return true;
@@ -2253,7 +2293,7 @@
 		return -1;
 	}
 
-	debug("syz_usb_control_io: bRequestType: 0x%x (%s), bRequest: 0x%x, wValue: 0x%x, wIndex: 0x%x, wLength: %d\n",
+	debug("syz_usb_control_io: bReqType: 0x%x (%s), bReq: 0x%x, wVal: 0x%x, wIdx: 0x%x, wLen: %d\n",
 	      event.ctrl.bRequestType, (event.ctrl.bRequestType & USB_DIR_IN) ? "IN" : "OUT",
 	      event.ctrl.bRequest, event.ctrl.wValue, event.ctrl.wIndex, event.ctrl.wLength);
 
@@ -2288,12 +2328,12 @@
 		memset(&response.data[0], 0, response_length);
 
 	if (event.ctrl.bRequestType & USB_DIR_IN) {
-		debug("syz_usb_control_io: IN, length = %d\n", response.inner.length);
+		debug("syz_usb_control_io: writing %d bytes\n", response.inner.length);
 		debug_dump_data(&response.data[0], response.inner.length);
 		rv = usb_fuzzer_ep0_write(fd, (struct usb_fuzzer_ep_io*)&response);
 	} else {
 		rv = usb_fuzzer_ep0_read(fd, (struct usb_fuzzer_ep_io*)&response);
-		debug("syz_usb_control_io: OUT, length = %d\n", response.inner.length);
+		debug("syz_usb_control_io: read %d bytes\n", response.inner.length);
 		debug_dump_data(&event.data[0], response.inner.length);
 	}
 	if (rv < 0) {
diff --git a/pkg/csource/options.go b/pkg/csource/options.go
index e63a768..2eda3ac 100644
--- a/pkg/csource/options.go
+++ b/pkg/csource/options.go
@@ -105,7 +105,7 @@
 	if OS == linux {
 		return nil
 	}
-	if opts.EnableTun && !(OS == openbsd || OS == freebsd) {
+	if opts.EnableTun && !(OS == openbsd || OS == freebsd || OS == netbsd) {
 		return fmt.Errorf("option EnableTun is not supported on %v", OS)
 	}
 	if opts.EnableNetDev {
@@ -124,7 +124,7 @@
 		return fmt.Errorf("EnableCloseFds is not supported on %v", OS)
 	}
 	if opts.Sandbox == sandboxNamespace ||
-		(opts.Sandbox == sandboxSetuid && !(OS == openbsd || OS == freebsd)) ||
+		(opts.Sandbox == sandboxSetuid && !(OS == openbsd || OS == freebsd || OS == netbsd)) ||
 		opts.Sandbox == sandboxAndroidUntrustedApp {
 		return fmt.Errorf("option Sandbox=%v is not supported on %v", opts.Sandbox, OS)
 	}
diff --git a/pkg/host/host.go b/pkg/host/host.go
index 25f7626..c7454d1 100644
--- a/pkg/host/host.go
+++ b/pkg/host/host.go
@@ -20,7 +20,8 @@
 	supported := make(map[*prog.Syscall]bool)
 	unsupported := make(map[*prog.Syscall]string)
 	// Akaros does not have own host and parasitizes on some other OS.
-	if target.OS == "akaros" || target.OS == "test" {
+	switch target.OS {
+	case "akaros", "fuchsia", "test":
 		for _, c := range target.Syscalls {
 			supported[c] = true
 		}
@@ -106,7 +107,8 @@
 		FeatureNetworkInjection:           {Name: "net packet injection", Reason: unsupported},
 		FeatureNetworkDevices:             {Name: "net device setup", Reason: unsupported},
 	}
-	if target.OS == "akaros" || target.OS == "test" {
+	switch target.OS {
+	case "akaros", "fuchsia", "test":
 		return res, nil
 	}
 	for n, check := range checkFeature {
@@ -126,7 +128,8 @@
 // Setup enables and does any one-time setup for the requested features on the host.
 // Note: this can be called multiple times and must be idempotent.
 func Setup(target *prog.Target, features *Features, featureFlags csource.Features, executor string) error {
-	if target.OS == "akaros" {
+	switch target.OS {
+	case "akaros", "fuchsia":
 		return nil
 	}
 	args := []string{"setup"}
diff --git a/pkg/host/host_linux.go b/pkg/host/host_linux.go
index 54a4f09..25da4b0 100644
--- a/pkg/host/host_linux.go
+++ b/pkg/host/host_linux.go
@@ -8,7 +8,6 @@
 	"fmt"
 	"io/ioutil"
 	"os"
-	"os/exec"
 	"regexp"
 	"runtime"
 	"strconv"
@@ -395,7 +394,7 @@
 	checkFeature[FeatureFaultInjection] = checkFaultInjection
 	checkFeature[FeatureLeakChecking] = checkLeakChecking
 	checkFeature[FeatureNetworkInjection] = checkNetworkInjection
-	checkFeature[FeatureNetworkDevices] = checkNetworkDevices
+	checkFeature[FeatureNetworkDevices] = unconditionallyEnabled
 }
 
 func checkCoverage() string {
@@ -541,7 +540,7 @@
 	if err := osutil.IsAccessible("/dev/net/tun"); err != nil {
 		return err.Error()
 	}
-	return checkNetworkDevices()
+	return ""
 }
 
 func checkUSBInjection() string {
@@ -551,13 +550,6 @@
 	return ""
 }
 
-func checkNetworkDevices() string {
-	if _, err := exec.LookPath("ip"); err != nil {
-		return "ip command is not found"
-	}
-	return ""
-}
-
 func checkDebugFS() string {
 	if err := osutil.IsAccessible("/sys/kernel/debug"); err != nil {
 		return "debugfs is not enabled or not mounted"
diff --git a/pkg/html/generated.go b/pkg/html/generated.go
index 3b11f3b..6826b41 100644
--- a/pkg/html/generated.go
+++ b/pkg/html/generated.go
@@ -130,8 +130,8 @@
 }
 
 .list_table .stat {
-	width: 50pt;
-	max-width: 50pt;
+	width: 55pt;
+	max-width: 55pt;
 	font-family: monospace;
 	text-align: right;
 }
@@ -221,7 +221,6 @@
 function textSort(v) { return v.toLowerCase(); }
 function numSort(v) { return -parseInt(v); }
 function floatSort(v) { return -parseFloat(v); }
-function yesSort(v) { return v == "yes" ? 0 : 1; }
 function reproSort(v) { return v == "C" ? 0 : v == "syz" ? 1 : 2; }
 function patchedSort(v) { return v == "" ? -1 : parseInt(v); }
 
diff --git a/pkg/html/html.go b/pkg/html/html.go
index 9a43b0d..1199c5a 100644
--- a/pkg/html/html.go
+++ b/pkg/html/html.go
@@ -51,6 +51,14 @@
 	"formatTagHash":          formatTagHash,
 	"formatCommitTableTitle": formatCommitTableTitle,
 	"formatList":             formatStringList,
+	"selectBisect":           selectBisect,
+}
+
+func selectBisect(rep *dashapi.BugReport) *dashapi.BisectResult {
+	if rep.BisectFix != nil {
+		return rep.BisectFix
+	}
+	return rep.BisectCause
 }
 
 func link(url, text string) template.HTML {
diff --git a/pkg/instance/instance.go b/pkg/instance/instance.go
index f46673d..cc1b147 100644
--- a/pkg/instance/instance.go
+++ b/pkg/instance/instance.go
@@ -394,7 +394,8 @@
 func FuzzerCmd(fuzzer, executor, name, OS, arch, fwdAddr, sandbox string, procs, verbosity int,
 	cover, debug, test, runtest bool) string {
 	osArg := ""
-	if OS == "akaros" {
+	switch OS {
+	case "akaros", "fuchsia":
 		// Only akaros needs OS, because the rest assume host OS.
 		// But speciying OS for all OSes breaks patch testing on syzbot
 		// because old execprog does not have os flag.
@@ -425,7 +426,8 @@
 		repeatCount = 0
 	}
 	osArg := ""
-	if OS == "akaros" {
+	switch OS {
+	case "akaros", "fuchsia":
 		osArg = " -os=" + OS
 	}
 	return fmt.Sprintf("%v -executor=%v -arch=%v%v -sandbox=%v"+
diff --git a/pkg/instance/instance_test.go b/pkg/instance/instance_test.go
index f4ab3a5..5b9a284 100644
--- a/pkg/instance/instance_test.go
+++ b/pkg/instance/instance_test.go
@@ -91,7 +91,7 @@
 	flagCollide := flags.Bool("collide", true, "collide syscalls to provoke data races")
 	flagSignal := flags.Bool("cover", false, "collect feedback signals (coverage)")
 	flagSandbox := flags.String("sandbox", "none", "sandbox for fuzzing (none/setuid/namespace)")
-	cmdLine := ExecprogCmd(os.Args[0], "/myexecutor", "fuchsia", "386", "namespace", true, false, false, 7, 2, 3, "myprog")
+	cmdLine := ExecprogCmd(os.Args[0], "/myexecutor", "freebsd", "386", "namespace", true, false, false, 7, 2, 3, "myprog")
 	args := strings.Split(cmdLine, " ")[1:]
 	if err := flags.Parse(args); err != nil {
 		t.Fatal(err)
diff --git a/pkg/ipc/ipc.go b/pkg/ipc/ipc.go
index 89799b4..978fcb7 100644
--- a/pkg/ipc/ipc.go
+++ b/pkg/ipc/ipc.go
@@ -263,15 +263,13 @@
 
 	atomic.AddUint64(&env.StatExecs, 1)
 	if env.cmd == nil {
-		if p.Target.OS == "akaros" {
+		switch p.Target.OS {
+		case "akaros", "fuchsia":
 			// On akaros executor is actually ssh,
 			// starting them too frequently leads to timeouts.
 			<-rateLimit.C
 		}
 		tmpDirPath := "./"
-		if p.Target.OS == "fuchsia" {
-			tmpDirPath = "/data/"
-		}
 		atomic.AddUint64(&env.StatRestarts, 1)
 		env.cmd, err0 = makeCommand(env.pid, env.bin, env.config, env.inFile, env.outFile, env.out, tmpDirPath)
 		if err0 != nil {
diff --git a/pkg/mgrconfig/load.go b/pkg/mgrconfig/load.go
index a4cbc89..f02f3c5 100644
--- a/pkg/mgrconfig/load.go
+++ b/pkg/mgrconfig/load.go
@@ -105,15 +105,8 @@
 	if err := checkSSHParams(cfg); err != nil {
 		return err
 	}
+	cfg.CompleteKernelDirs()
 
-	cfg.KernelObj = osutil.Abs(cfg.KernelObj)
-	if cfg.KernelSrc == "" {
-		cfg.KernelSrc = cfg.KernelObj // assume in-tree build by default
-	}
-	cfg.KernelSrc = osutil.Abs(cfg.KernelSrc)
-	if cfg.KernelBuildSrc == "" {
-		cfg.KernelBuildSrc = cfg.KernelSrc
-	}
 	if cfg.HubClient != "" && (cfg.Name == "" || cfg.HubAddr == "" || cfg.HubKey == "") {
 		return fmt.Errorf("hub_client is set, but name/hub_addr/hub_key is empty")
 	}
@@ -126,6 +119,17 @@
 	return nil
 }
 
+func (cfg *Config) CompleteKernelDirs() {
+	cfg.KernelObj = osutil.Abs(cfg.KernelObj)
+	if cfg.KernelSrc == "" {
+		cfg.KernelSrc = cfg.KernelObj // assume in-tree build by default
+	}
+	cfg.KernelSrc = osutil.Abs(cfg.KernelSrc)
+	if cfg.KernelBuildSrc == "" {
+		cfg.KernelBuildSrc = cfg.KernelSrc
+	}
+}
+
 func checkSSHParams(cfg *Config) error {
 	if cfg.SSHUser == "" {
 		return fmt.Errorf("bad config syzkaller param: ssh user is empty")
diff --git a/pkg/report/gvisor.go b/pkg/report/gvisor.go
index 480ad24..958e989 100644
--- a/pkg/report/gvisor.go
+++ b/pkg/report/gvisor.go
@@ -20,13 +20,15 @@
 		"fatal error: runtime: out of memory",
 		"fatal error: runtime: cannot allocate memory",
 		"fatal error: newosproc",
-		"panic: ptrace sysemu failed: no such process",           // OOM kill
-		`panic: ptrace (s|g)et fpregs.* failed: no such process`, // OOM kill
-		`panic: ptrace (s|g)et regs.* failed: no such process`,   // OOM kill
-		"panic: error initializing first thread: resource temporarily unavailable",
+		"panic: ptrace sysemu failed: no such process",                                          // OOM kill
+		`panic: ptrace (s|g)et fpregs.* failed: no such process`,                                // OOM kill
+		`panic: ptrace (s|g)et regs.* failed: no such process`,                                  // OOM kill
+		"panic: error initializing first thread: resource temporarily unavailable",              // PID exhaustion
+		"panic: unable to activate mm: creating stub process: resource temporarily unavailable", // PID exhaustion
+		"panic: executor failed: pthread_create failed",                                         // PID exhaustion
 		"panic: failed to start executor binary",
-		"panic: executor failed: pthread_create failed",
 		"panic: error mapping run data: error mapping runData: cannot allocate memory",
+		"race: limit on 8128 simultaneously alive goroutines is exceeded, dying",
 		"ERROR: ThreadSanitizer", // Go race failing due to OOM.
 		"FATAL: ThreadSanitizer",
 	}
diff --git a/pkg/report/linux.go b/pkg/report/linux.go
index 7334d6e..16c71af 100644
--- a/pkg/report/linux.go
+++ b/pkg/report/linux.go
@@ -705,6 +705,7 @@
 		"mutex_lock",
 		"mutex_trylock",
 		"mutex_unlock",
+		"mutex_remove_waiter",
 		"osq_lock",
 		"osq_unlock",
 		"__wake_up",
@@ -758,6 +759,18 @@
 		"program_check_exception",
 		"program_check_common",
 		"del_timer_sync",
+		"flush_work",
+		"__cancel_work_timer",
+		"cancel_work_sync",
+		"flush_workqueue",
+		"drain_workqueue",
+		"destroy_workqueue",
+		"get_device_parent",
+		"device_add",
+		"finish_wait",
+		"rollback_registered",
+		"unregister_netdev",
+		"usb_kill_urb",
 	},
 	corruptedLines: []*regexp.Regexp{
 		// Fault injection stacks are frequently intermixed with crash reports.
@@ -1018,11 +1031,12 @@
 		[]byte("WARNING:"),
 		[]oopsFormat{
 			{
-				title: compile("WARNING: .*lib/debugobjects\\.c.* debug_print_object"),
+				title: compile("WARNING: .*lib/debugobjects\\.c.* (?:debug_print|debug_check)"),
 				fmt:   "WARNING: ODEBUG bug in %[1]v",
 				// Skip all users of ODEBUG as well.
 				stack: warningStackFmt("debug_", "rcu", "hrtimer_", "timer_",
-					"work_", "percpu_", "kmem_", "slab_", "kfree", "vunmap", "vfree"),
+					"work_", "percpu_", "kmem_", "slab_", "kfree", "vunmap",
+					"vfree", "__free_", "debug_check"),
 			},
 			{
 				title: compile("WARNING: .*mm/usercopy\\.c.* usercopy_warn"),
@@ -1042,7 +1056,7 @@
 			{
 				title: compile("WARNING: .*lib/refcount\\.c.* refcount_"),
 				fmt:   "WARNING: refcount bug in %[1]v",
-				stack: warningStackFmt("refcount"),
+				stack: warningStackFmt("refcount", "kobject_"),
 			},
 			{
 				title: compile("WARNING: .*kernel/locking/lockdep\\.c.*lock_"),
diff --git a/pkg/report/openbsd.go b/pkg/report/openbsd.go
index 0182b34..7fcb8db 100644
--- a/pkg/report/openbsd.go
+++ b/pkg/report/openbsd.go
@@ -184,6 +184,10 @@
 				fmt:   "witness: thread exiting with locks held",
 			},
 			{
+				title: compile("witness: userret: returning with the following locks held:(.*\\n)+?.*sys_([a-z0-9_]+)\\+"),
+				fmt:   "witness: userret: %[2]v",
+			},
+			{
 				title: compile("(witness: .*)"),
 				fmt:   "%[1]v",
 			},
diff --git a/pkg/report/testdata/gvisor/report/24 b/pkg/report/testdata/gvisor/report/24
new file mode 100644
index 0000000..2f83894
--- /dev/null
+++ b/pkg/report/testdata/gvisor/report/24
@@ -0,0 +1,13 @@
+TITLE: panic: unable to activate mm: creating stub process: resource temporarily unavailable
+SUPPRESSED: Y
+
+panic: unable to activate mm: creating stub process: resource temporarily unavailable
+
+goroutine 442298 [running]:
+gvisor.dev/gvisor/pkg/sentry/kernel.(*Task).Activate(0xc001b48000)
+	pkg/sentry/kernel/task_usermem.go:34 +0xc7
+gvisor.dev/gvisor/pkg/sentry/kernel.(*Task).run(0xc001b48000, 0x1671)
+	pkg/sentry/kernel/task_run.go:67 +0x15c
+created by gvisor.dev/gvisor/pkg/sentry/kernel.(*Task).Start
+	pkg/sentry/kernel/task_start.go:299 +0xfe
+
diff --git a/pkg/report/testdata/linux/report/215 b/pkg/report/testdata/linux/report/215
index ffe9c3f..0dd634d 100644
--- a/pkg/report/testdata/linux/report/215
+++ b/pkg/report/testdata/linux/report/215
@@ -1,4 +1,4 @@
-TITLE: general protection fault in drain_workqueue
+TITLE: general protection fault in ucma_close
 
 [   52.099632] kasan: GPF could be caused by NULL-ptr deref or user memory access
 [   52.106982] general protection fault: 0000 [#1] SMP KASAN
diff --git a/pkg/report/testdata/linux/report/351 b/pkg/report/testdata/linux/report/351
index e7051bd..8307e2a 100644
--- a/pkg/report/testdata/linux/report/351
+++ b/pkg/report/testdata/linux/report/351
@@ -1,4 +1,4 @@
-TITLE: INFO: trying to register non-static key in __flush_work
+TITLE: INFO: trying to register non-static key in vkms_atomic_crtc_destroy_state
 
 [  309.975408][T12234] INFO: trying to register non-static key.
 [  309.981253][T12234] the code is fine but needs lockdep annotation.
diff --git a/pkg/report/testdata/linux/report/399 b/pkg/report/testdata/linux/report/399
new file mode 100644
index 0000000..744c8b0
--- /dev/null
+++ b/pkg/report/testdata/linux/report/399
@@ -0,0 +1,66 @@
+TITLE: WARNING in em28xx_usb_disconnect
+
+[   31.912260][   T21] ------------[ cut here ]------------
+[   31.917870][   T21] WARNING: CPU: 1 PID: 21 at kernel/workqueue.c:3031 __flush_work.cold+0x2c/0x36
+[   31.927362][   T21] Kernel panic - not syncing: panic_on_warn set ...
+[   31.934264][   T21] CPU: 1 PID: 21 Comm: kworker/1:1 Not tainted 5.3.0-rc2+ #25
+[   31.942018][   T21] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   31.952079][   T21] Workqueue: usb_hub_wq hub_event
+[   31.957276][   T21] Call Trace:
+[   31.960620][   T21]  dump_stack+0xca/0x13e
+[   31.965111][   T21]  ? alloc_unbound_pwq.cold+0x40/0x6a
+[   31.971638][   T21]  panic+0x2a3/0x6da
+[   31.975732][   T21]  ? add_taint.cold+0x16/0x16
+[   31.980486][   T21]  ? __probe_kernel_read+0x188/0x1d0
+[   31.985780][   T21]  ? __warn.cold+0x5/0x4a
+[   31.990110][   T21]  ? __warn+0xe3/0x1e0
+[   31.994260][   T21]  ? __flush_work.cold+0x2c/0x36
+[   31.999595][   T21]  __warn.cold+0x20/0x4a
+[   32.003835][   T21]  ? __flush_work.cold+0x2c/0x36
+[   32.008987][   T21]  report_bug+0x262/0x2a0
+[   32.013304][   T21]  do_error_trap+0x12b/0x1e0
+[   32.017879][   T21]  ? __flush_work.cold+0x2c/0x36
+[   32.022948][   T21]  do_invalid_op+0x32/0x40
+[   32.027646][   T21]  ? __flush_work.cold+0x2c/0x36
+[   32.032661][   T21]  invalid_op+0x23/0x30
+[   32.037069][   T21] RIP: 0010:__flush_work.cold+0x2c/0x36
+[   32.042687][   T21] Code: 9a 22 00 48 c7 c7 20 e4 c5 85 e8 d9 3a 0d 00 0f 0b 45 31 e4 e9 98 86 ff ff e8 51 9a 22 00 48 c7 c7 20 e4 c5 85 e8 be 3a 0d 00 <0f> 0b 45 31 e4 e9 7d 86 ff ff e8 36 9a 22 00 48 c7 c7 20 e4 c5 85
+[   32.066233][   T21] RSP: 0018:ffff8881da2f7720 EFLAGS: 00010286
+[   32.072615][   T21] RAX: 0000000000000024 RBX: dffffc0000000000 RCX: 0000000000000000
+[   32.081158][   T21] RDX: 0000000000000000 RSI: ffffffff8128a0fd RDI: ffffed103b45eed6
+[   32.090281][   T21] RBP: ffff8881da2f7888 R08: 0000000000000024 R09: fffffbfff11acd9a
+[   32.100441][   T21] R10: fffffbfff11acd99 R11: ffffffff88d66ccf R12: 0000000000000000
+[   32.109253][   T21] R13: 0000000000000001 R14: ffff8881d2e99df8 R15: ffff8881d2d61b78
+[   32.117896][   T21]  ? vprintk_func+0x7d/0x113
+[   32.122925][   T21]  ? wq_update_unbound_numa+0x710/0x710
+[   32.128901][   T21]  ? __dev_printk+0x1db/0x203
+[   32.133677][   T21]  ? _dev_info+0xd7/0x109
+[   32.138711][   T21]  ? _dev_notice+0x109/0x109
+[   32.143931][   T21]  ? lockdep_hardirqs_on+0x379/0x580
+[   32.149820][   T21]  ? usb_hcd_flush_endpoint+0x14c/0x2d0
+[   32.155978][   T21]  ? usb_disable_endpoint+0x1ba/0x1f0
+[   32.161459][   T21]  em28xx_usb_disconnect.cold+0x280/0x2a6
+[   32.170214][   T21]  usb_unbind_interface+0x1bd/0x8a0
+[   32.177191][   T21]  ? usb_autoresume_device+0x60/0x60
+[   32.182587][   T21]  device_release_driver_internal+0x404/0x4c0
+[   32.188714][   T21]  bus_remove_device+0x2dc/0x4a0
+[   32.195974][   T21]  device_del+0x420/0xb10
+[   32.200916][   T21]  ? __device_links_no_driver+0x240/0x240
+[   32.207857][   T21]  ? usb_remove_ep_devs+0x3e/0x80
+[   32.213675][   T21]  ? remove_intf_ep_devs+0x13f/0x1d0
+[   32.220341][   T21]  usb_disable_device+0x211/0x690
+[   32.225687][   T21]  usb_disconnect+0x284/0x8d0
+[   32.230774][   T21]  hub_event+0x1454/0x3640
+[   32.235406][   T21]  ? find_held_lock+0x2d/0x110
+[   32.240229][   T21]  ? mark_held_locks+0xe0/0xe0
+[   32.245957][   T21]  ? hub_port_debounce+0x260/0x260
+[   32.252587][   T21]  process_one_work+0x92b/0x1530
+[   32.257632][   T21]  ? pwq_dec_nr_in_flight+0x310/0x310
+[   32.263522][   T21]  ? do_raw_spin_lock+0x11a/0x280
+[   32.269121][   T21]  worker_thread+0x7ab/0xe20
+[   32.276466][   T21]  ? process_one_work+0x1530/0x1530
+[   32.282107][   T21]  kthread+0x318/0x420
+[   32.286548][   T21]  ? kthread_create_on_node+0xf0/0xf0
+[   32.292243][   T21]  ret_from_fork+0x24/0x30
+[   32.297457][   T21] Kernel Offset: disabled
+[   32.302033][   T21] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/400 b/pkg/report/testdata/linux/report/400
new file mode 100644
index 0000000..7d8ee79
--- /dev/null
+++ b/pkg/report/testdata/linux/report/400
@@ -0,0 +1,43 @@
+TITLE: WARNING in blk_sync_queue
+
+WARNING: CPU: 1 PID: 3214 at kernel/workqueue.c:2911 __flush_work+0x740/0x880 kernel/workqueue.c:2911
+Kernel panic - not syncing: panic_on_warn set ...
+
+CPU: 1 PID: 3214 Comm: kworker/1:2 Not tainted 4.19.38 #6
+Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+Workqueue: md_misc mddev_delayed_delete
+Call Trace:
+ __dump_stack lib/dump_stack.c:77 [inline]
+ dump_stack+0x172/0x1f0 lib/dump_stack.c:113
+ panic+0x263/0x51d kernel/panic.c:185
+ __warn.cold+0x20/0x54 kernel/panic.c:540
+ report_bug+0x263/0x2b0 lib/bug.c:186
+ fixup_bug arch/x86/kernel/traps.c:178 [inline]
+ fixup_bug arch/x86/kernel/traps.c:173 [inline]
+ do_error_trap+0x204/0x360 arch/x86/kernel/traps.c:296
+ do_invalid_op+0x1b/0x20 arch/x86/kernel/traps.c:316
+ invalid_op+0x14/0x20 arch/x86/entry/entry_64.S:997
+RIP: 0010:__flush_work+0x740/0x880 kernel/workqueue.c:2911
+Code: 74 58 e8 63 59 25 00 fb 66 0f 1f 44 00 00 45 31 e4 e9 86 fd ff ff e8 4f 59 25 00 0f 0b 45 31 e4 e9 77 fd ff ff e8 40 59 25 00 <0f> 0b 45 31 e4 e9 68 fd ff ff e8 31 59 25 00 4c 89 ff 45 31 e4 e8
+RSP: 0018:ffff88809bc3f990 EFLAGS: 00010293
+RAX: ffff88809bc10640 RBX: dffffc0000000000 RCX: ffffffff8146100b
+RDX: 0000000000000000 RSI: ffffffff814616b0 RDI: 0000000000000001
+RBP: ffff88809bc3faf8 R08: ffff88809bc10640 R09: ffff88809bc10f08
+R10: 0000000000000000 R11: 0000000000000000 R12: ffff88809aca8690
+R13: ffff88809bc3fad0 R14: 0000000000000001 R15: 0000000000000001
+ __cancel_work_timer+0x3bf/0x520 kernel/workqueue.c:3007
+ cancel_work_sync+0x18/0x20 kernel/workqueue.c:3043
+ blk_sync_queue+0x33/0x1c0 block/blk-core.c:408
+ blk_cleanup_queue+0x404/0x720 block/blk-core.c:807
+ md_free+0xcb/0x1b0 drivers/md/md.c:5223
+ kobject_cleanup lib/kobject.c:662 [inline]
+ kobject_release lib/kobject.c:691 [inline]
+ kref_put include/linux/kref.h:70 [inline]
+ kobject_put.cold+0x28f/0x2ec lib/kobject.c:708
+ mddev_delayed_delete+0x34/0x40 drivers/md/md.c:5251
+ process_one_work+0x98e/0x1760 kernel/workqueue.c:2153
+ worker_thread+0x98/0xe40 kernel/workqueue.c:2296
+ kthread+0x357/0x430 kernel/kthread.c:246
+ ret_from_fork+0x3a/0x50 arch/x86/entry/entry_64.S:413
+Kernel Offset: disabled
+Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/401 b/pkg/report/testdata/linux/report/401
new file mode 100644
index 0000000..11c5242
--- /dev/null
+++ b/pkg/report/testdata/linux/report/401
@@ -0,0 +1,99 @@
+TITLE: KMSAN: kernel-usb-infoleak in ttusb_dec_send_command
+
+[   77.965881][   T49] ==================================================================
+[   77.974025][   T49] BUG: KMSAN: kernel-usb-infoleak in usb_submit_urb+0x7ec/0x1fa0
+[   77.981755][   T49] CPU: 1 PID: 49 Comm: kworker/1:1 Not tainted 5.1.0+ #1
+[   77.988770][   T49] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   77.998818][   T49] Workqueue: usb_hub_wq hub_event
+[   78.003821][   T49] Call Trace:
+[   78.007147][   T49]  dump_stack+0x191/0x1f0
+[   78.011468][   T49]  kmsan_report+0x162/0x2d0
+[   78.015969][   T49]  kmsan_internal_check_memory+0x974/0xa80
+[   78.021758][   T49]  ? hub_event+0x48d1/0x7290
+[   78.026329][   T49]  ? process_one_work+0x1572/0x1f00
+[   78.031503][   T49]  ? worker_thread+0x111b/0x2460
+[   78.036422][   T49]  ? kthread+0x4b5/0x4f0
+[   78.040655][   T49]  ? kmsan_get_shadow_origin_ptr+0x71/0x470
+[   78.046533][   T49]  kmsan_handle_urb+0x28/0x40
+[   78.051196][   T49]  usb_submit_urb+0x7ec/0x1fa0
+[   78.055960][   T49]  usb_start_wait_urb+0x143/0x410
+[   78.060976][   T49]  usb_bulk_msg+0x811/0x920
+[   78.065477][   T49]  ttusb_dec_send_command+0x47d/0xd50
+[   78.070836][   T49]  ttusb_dec_probe+0xe31/0x4e00
+[   78.075682][   T49]  ? __pm_runtime_set_status+0xf5e/0x1400
+[   78.081392][   T49]  ? kmsan_get_shadow_origin_ptr+0x71/0x470
+[   78.087299][   T49]  ? saa7134_go7007_s_std+0x30/0x30
+[   78.092495][   T49]  ? saa7134_go7007_s_std+0x30/0x30
+[   78.097681][   T49]  usb_probe_interface+0xd66/0x1320
+[   78.102872][   T49]  ? usb_register_driver+0x7d0/0x7d0
+[   78.108138][   T49]  really_probe+0xdae/0x1d80
+[   78.112712][   T49]  driver_probe_device+0x1b3/0x4f0
+[   78.117808][   T49]  __device_attach_driver+0x5b8/0x790
+[   78.123172][   T49]  bus_for_each_drv+0x28e/0x3b0
+[   78.128002][   T49]  ? deferred_probe_work_func+0x400/0x400
+[   78.133705][   T49]  __device_attach+0x454/0x730
+[   78.138462][   T49]  device_initial_probe+0x4a/0x60
+[   78.143478][   T49]  bus_probe_device+0x137/0x390
+[   78.148332][   T49]  device_add+0x288d/0x30e0
+[   78.153592][   T49]  usb_set_configuration+0x30dc/0x3750
+[   78.159054][   T49]  generic_probe+0xe7/0x280
+[   78.163546][   T49]  ? usb_choose_configuration+0xae0/0xae0
+[   78.169252][   T49]  usb_probe_device+0x14c/0x200
+[   78.174111][   T49]  ? usb_register_device_driver+0x470/0x470
+[   78.179996][   T49]  really_probe+0xdae/0x1d80
+[   78.184622][   T49]  driver_probe_device+0x1b3/0x4f0
+[   78.189723][   T49]  __device_attach_driver+0x5b8/0x790
+[   78.195082][   T49]  bus_for_each_drv+0x28e/0x3b0
+[   78.199913][   T49]  ? deferred_probe_work_func+0x400/0x400
+[   78.205614][   T49]  __device_attach+0x454/0x730
+[   78.210360][   T49]  device_initial_probe+0x4a/0x60
+[   78.215363][   T49]  bus_probe_device+0x137/0x390
+[   78.220196][   T49]  device_add+0x288d/0x30e0
+[   78.224706][   T49]  usb_new_device+0x23e5/0x2ff0
+[   78.229550][   T49]  hub_event+0x48d1/0x7290
+[   78.233980][   T49]  ? kmsan_get_shadow_origin_ptr+0x71/0x470
+[   78.239850][   T49]  ? led_work+0x720/0x720
+[   78.244157][   T49]  ? led_work+0x720/0x720
+[   78.248472][   T49]  process_one_work+0x1572/0x1f00
+[   78.253491][   T49]  worker_thread+0x111b/0x2460
+[   78.258346][   T49]  kthread+0x4b5/0x4f0
+[   78.262397][   T49]  ? process_one_work+0x1f00/0x1f00
+[   78.267580][   T49]  ? kthread_blkcg+0xf0/0xf0
+[   78.272166][   T49]  ret_from_fork+0x35/0x40
+[   78.276566][   T49]
+[   78.278872][   T49] Uninit was created at:
+[   78.283099][   T49]  kmsan_internal_poison_shadow+0x92/0x150
+[   78.288881][   T49]  kmsan_kmalloc+0xa4/0x130
+[   78.293364][   T49]  kmem_cache_alloc_trace+0x503/0xae0
+[   78.298712][   T49]  ttusb_dec_send_command+0x155/0xd50
+[   78.304063][   T49]  ttusb_dec_probe+0xe31/0x4e00
+[   78.308909][   T49]  usb_probe_interface+0xd66/0x1320
+[   78.314088][   T49]  really_probe+0xdae/0x1d80
+[   78.318654][   T49]  driver_probe_device+0x1b3/0x4f0
+[   78.323762][   T49]  __device_attach_driver+0x5b8/0x790
+[   78.329115][   T49]  bus_for_each_drv+0x28e/0x3b0
+[   78.333941][   T49]  __device_attach+0x454/0x730
+[   78.338682][   T49]  device_initial_probe+0x4a/0x60
+[   78.343682][   T49]  bus_probe_device+0x137/0x390
+[   78.348508][   T49]  device_add+0x288d/0x30e0
+[   78.353019][   T49]  usb_set_configuration+0x30dc/0x3750
+[   78.358554][   T49]  generic_probe+0xe7/0x280
+[   78.363047][   T49]  usb_probe_device+0x14c/0x200
+[   78.367870][   T49]  really_probe+0xdae/0x1d80
+[   78.372538][   T49]  driver_probe_device+0x1b3/0x4f0
+[   78.377630][   T49]  __device_attach_driver+0x5b8/0x790
+[   78.382979][   T49]  bus_for_each_drv+0x28e/0x3b0
+[   78.387807][   T49]  __device_attach+0x454/0x730
+[   78.392558][   T49]  device_initial_probe+0x4a/0x60
+[   78.397566][   T49]  bus_probe_device+0x137/0x390
+[   78.402401][   T49]  device_add+0x288d/0x30e0
+[   78.406884][   T49]  usb_new_device+0x23e5/0x2ff0
+[   78.411737][   T49]  hub_event+0x48d1/0x7290
+[   78.416138][   T49]  process_one_work+0x1572/0x1f00
+[   78.421144][   T49]  worker_thread+0x111b/0x2460
+[   78.425889][   T49]  kthread+0x4b5/0x4f0
+[   78.429936][   T49]  ret_from_fork+0x35/0x40
+[   78.434329][   T49]
+[   78.436634][   T49] Bytes 4-63 of 64 are uninitialized
+[   78.441891][   T49] Memory access of size 64 starts at ffff888106214540
+[   78.448625][   T49] ==================================================================
diff --git a/pkg/report/testdata/linux/report/402 b/pkg/report/testdata/linux/report/402
new file mode 100644
index 0000000..bfc09fd
--- /dev/null
+++ b/pkg/report/testdata/linux/report/402
@@ -0,0 +1,100 @@
+TITLE: KMSAN: kernel-usb-infoleak in pcan_usb_pro_send_req
+
+[  321.531266][  T457] ==================================================================
+[  321.539455][  T457] BUG: KMSAN: kernel-usb-infoleak in usb_submit_urb+0x7ec/0x1fa0
+[  321.547172][  T457] CPU: 1 PID: 457 Comm: kworker/1:1 Not tainted 5.1.0+ #1
+[  321.554274][  T457] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[  321.564436][  T457] Workqueue: usb_hub_wq hub_event
+[  321.569463][  T457] Call Trace:
+[  321.572954][  T457]  dump_stack+0x191/0x1f0
+[  321.577296][  T457]  kmsan_report+0x162/0x2d0
+[  321.581835][  T457]  kmsan_internal_check_memory+0x974/0xa80
+[  321.587746][  T457]  ? device_add+0x288d/0x30e0
+[  321.592452][  T457]  ? usb_new_device+0x23e5/0x2ff0
+[  321.597486][  T457]  ? hub_event+0x48d1/0x7290
+[  321.602130][  T457]  ? process_one_work+0x1572/0x1f00
+[  321.607392][  T457]  ? kthread+0x4b5/0x4f0
+[  321.611641][  T457]  ? ret_from_fork+0x35/0x40
+[  321.616308][  T457]  ? kmsan_get_shadow_origin_ptr+0x71/0x470
+[  321.622234][  T457]  kmsan_handle_urb+0x28/0x40
+[  321.626936][  T457]  usb_submit_urb+0x7ec/0x1fa0
+[  321.631724][  T457]  usb_start_wait_urb+0x143/0x410
+[  321.636778][  T457]  usb_control_msg+0x49f/0x7f0
+[  321.641690][  T457]  pcan_usb_pro_send_req+0x26b/0x3e0
+[  321.647009][  T457]  pcan_usb_fd_init+0x16ee/0x1900
+[  321.652061][  T457]  ? pcan_usb_pro_set_ts+0x490/0x490
+[  321.657344][  T457]  peak_usb_probe+0x1411/0x1b10
+[  321.662231][  T457]  ? peak_usb_do_device_exit+0x240/0x240
+[  321.667885][  T457]  usb_probe_interface+0xd66/0x1320
+[  321.673102][  T457]  ? usb_register_driver+0x7d0/0x7d0
+[  321.678437][  T457]  really_probe+0xdae/0x1d80
+[  321.683071][  T457]  driver_probe_device+0x1b3/0x4f0
+[  321.688226][  T457]  __device_attach_driver+0x5b8/0x790
+[  321.693632][  T457]  bus_for_each_drv+0x28e/0x3b0
+[  321.698499][  T457]  ? deferred_probe_work_func+0x400/0x400
+[  321.704239][  T457]  __device_attach+0x454/0x730
+[  321.709009][  T457]  device_initial_probe+0x4a/0x60
+[  321.714029][  T457]  bus_probe_device+0x137/0x390
+[  321.718886][  T457]  device_add+0x288d/0x30e0
+[  321.723449][  T457]  usb_set_configuration+0x30dc/0x3750
+[  321.729142][  T457]  generic_probe+0xe7/0x280
+[  321.733673][  T457]  ? usb_choose_configuration+0xae0/0xae0
+[  321.739430][  T457]  usb_probe_device+0x14c/0x200
+[  321.744312][  T457]  ? usb_register_device_driver+0x470/0x470
+[  321.750208][  T457]  really_probe+0xdae/0x1d80
+[  321.756129][  T457]  driver_probe_device+0x1b3/0x4f0
+[  321.761248][  T457]  __device_attach_driver+0x5b8/0x790
+[  321.766650][  T457]  bus_for_each_drv+0x28e/0x3b0
+[  321.771518][  T457]  ? deferred_probe_work_func+0x400/0x400
+[  321.777245][  T457]  __device_attach+0x454/0x730
+[  321.782028][  T457]  device_initial_probe+0x4a/0x60
+[  321.787062][  T457]  bus_probe_device+0x137/0x390
+[  321.791926][  T457]  device_add+0x288d/0x30e0
+[  321.796493][  T457]  usb_new_device+0x23e5/0x2ff0
+[  321.801391][  T457]  hub_event+0x48d1/0x7290
+[  321.805922][  T457]  ? kmsan_get_shadow_origin_ptr+0x71/0x470
+[  321.811841][  T457]  ? led_work+0x720/0x720
+[  321.816185][  T457]  ? led_work+0x720/0x720
+[  321.820516][  T457]  process_one_work+0x1572/0x1f00
+[  321.825557][  T457]  worker_thread+0x111b/0x2460
+[  321.830341][  T457]  kthread+0x4b5/0x4f0
+[  321.834414][  T457]  ? process_one_work+0x1f00/0x1f00
+[  321.839621][  T457]  ? kthread_blkcg+0xf0/0xf0
+[  321.844224][  T457]  ret_from_fork+0x35/0x40
+[  321.848661][  T457]
+[  321.850974][  T457] Uninit was created at:
+[  321.855209][  T457]  kmsan_internal_poison_shadow+0x92/0x150
+[  321.861001][  T457]  kmsan_kmalloc+0xa4/0x130
+[  321.865501][  T457]  kmem_cache_alloc_trace+0x503/0xae0
+[  321.870872][  T457]  pcan_usb_fd_init+0x446/0x1900
+[  321.875797][  T457]  peak_usb_probe+0x1411/0x1b10
+[  321.880654][  T457]  usb_probe_interface+0xd66/0x1320
+[  321.885862][  T457]  really_probe+0xdae/0x1d80
+[  321.890468][  T457]  driver_probe_device+0x1b3/0x4f0
+[  321.895600][  T457]  __device_attach_driver+0x5b8/0x790
+[  321.900971][  T457]  bus_for_each_drv+0x28e/0x3b0
+[  321.905833][  T457]  __device_attach+0x454/0x730
+[  321.910582][  T457]  device_initial_probe+0x4a/0x60
+[  321.915600][  T457]  bus_probe_device+0x137/0x390
+[  321.920482][  T457]  device_add+0x288d/0x30e0
+[  321.924974][  T457]  usb_set_configuration+0x30dc/0x3750
+[  321.930420][  T457]  generic_probe+0xe7/0x280
+[  321.934931][  T457]  usb_probe_device+0x14c/0x200
+[  321.939793][  T457]  really_probe+0xdae/0x1d80
+[  321.944374][  T457]  driver_probe_device+0x1b3/0x4f0
+[  321.949482][  T457]  __device_attach_driver+0x5b8/0x790
+[  321.963786][  T457]  bus_for_each_drv+0x28e/0x3b0
+[  321.968647][  T457]  __device_attach+0x454/0x730
+[  321.973409][  T457]  device_initial_probe+0x4a/0x60
+[  321.978447][  T457]  bus_probe_device+0x137/0x390
+[  321.983307][  T457]  device_add+0x288d/0x30e0
+[  321.987833][  T457]  usb_new_device+0x23e5/0x2ff0
+[  321.993243][  T457]  hub_event+0x48d1/0x7290
+[  321.997667][  T457]  process_one_work+0x1572/0x1f00
+[  322.002696][  T457]  worker_thread+0x111b/0x2460
+[  322.007464][  T457]  kthread+0x4b5/0x4f0
+[  322.011521][  T457]  ret_from_fork+0x35/0x40
+[  322.015927][  T457]
+[  322.018266][  T457] Bytes 2-15 of 16 are uninitialized
+[  322.023559][  T457] Memory access of size 16 starts at ffff88803afb7000
+[  322.030313][  T457] ==================================================================
diff --git a/pkg/report/testdata/linux/report/403 b/pkg/report/testdata/linux/report/403
new file mode 100644
index 0000000..dba6dfe
--- /dev/null
+++ b/pkg/report/testdata/linux/report/403
@@ -0,0 +1,47 @@
+TITLE: BUG: MAX_STACK_TRACE_ENTRIES too low!
+
+[  185.416858][  T809] BUG: MAX_STACK_TRACE_ENTRIES too low!
+[  185.422408][  T809] turning off the locking correctness validator.
+[  185.428702][  T809] CPU: 1 PID: 809 Comm: syz-executor986 Not tainted 5.1.0-rc2+ #44
+[  185.436697][  T809] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[  185.446719][  T809] Call Trace:
+[  185.449986][  T809]  dump_stack+0x172/0x1f0
+[  185.454359][  T809]  save_trace.cold+0x14/0x19
+[  185.458944][  T809]  mark_lock+0x2fb/0x1380
+[  185.463242][  T809]  ? is_bpf_text_address+0xac/0x170
+[  185.468401][  T809]  ? print_shortest_lock_dependencies+0x90/0x90
+[  185.474608][  T809]  __lock_acquire+0x1317/0x3fb0
+[  185.479423][  T809]  ? lock_downgrade+0x880/0x880
+[  185.484239][  T809]  ? __sanitizer_cov_trace_const_cmp4+0x16/0x20
+[  185.490438][  T809]  ? is_dynamic_key+0x1c0/0x1c0
+[  185.495251][  T809]  ? mark_held_locks+0xf0/0xf0
+[  185.499975][  T809]  ? __lock_acquire+0x548/0x3fb0
+[  185.504875][  T809]  ? __kernel_text_address+0xd/0x40
+[  185.510033][  T809]  ? unwind_get_return_address+0x61/0xa0
+[  185.515627][  T809]  lock_acquire+0x16f/0x3f0
+[  185.520095][  T809]  ? flush_workqueue+0xf7/0x14c0
+[  185.525009][  T809]  flush_workqueue+0x126/0x14c0
+[  185.529824][  T809]  ? flush_workqueue+0xf7/0x14c0
+[  185.534722][  T809]  ? lock_downgrade+0x880/0x880
+[  185.539537][  T809]  ? pwq_unbound_release_workfn+0x2f0/0x2f0
+[  185.545395][  T809]  ? wait_for_completion+0x440/0x440
+[  185.550686][  T809]  ? mutex_trylock+0x1e0/0x1e0
+[  185.555425][  T809]  ? ucma_free_ctx+0xb90/0xb90
+[  185.560165][  T809]  drain_workqueue+0x1b4/0x470
+[  185.564900][  T809]  ? drain_workqueue+0x1b4/0x470
+[  185.569804][  T809]  ? fsnotify+0x811/0xbc0
+[  185.574102][  T809]  ? ucma_free_ctx+0xb90/0xb90
+[  185.578862][  T809]  destroy_workqueue+0x21/0x700
+[  185.583692][  T809]  ? ucma_free_ctx+0xb90/0xb90
+[  185.588414][  T809]  ucma_close+0x289/0x320
+[  185.592706][  T809]  ? __might_sleep+0x95/0x190
+[  185.597343][  T809]  ? ucma_free_ctx+0xb90/0xb90
+[  185.602069][  T809]  __fput+0x2e5/0x8d0
+[  185.606015][  T809]  ____fput+0x16/0x20
+[  185.609956][  T809]  task_work_run+0x14a/0x1c0
+[  185.614530][  T809]  exit_to_usermode_loop+0x273/0x2c0
+[  185.619778][  T809]  do_syscall_64+0x52d/0x610
+[  185.624342][  T809]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[  185.630195][  T809] RIP: 0033:0x400ef0
+[  185.634068][  T809] Code: 01 f0 ff ff 0f 83 20 0c 00 00 c3 66 2e 0f 1f 84 00 00 00 00 00 0f 1f 44 00 00 83 3d dd 17 2d 00 00 75 14 b8 03 00 00 00 0f 05 <48> 3d 01 f0 ff ff 0f 83 f4 0b 00 00 c3 48 83 ec 08 e8 5a 01 00 00
+[  185.653672][  T809] RSP: 002b:00007ffecc78cbb8 EFLAGS: 00000246 ORIG_RAX: 0000000000000003
diff --git a/pkg/report/testdata/linux/report/404 b/pkg/report/testdata/linux/report/404
new file mode 100644
index 0000000..ce9621f
--- /dev/null
+++ b/pkg/report/testdata/linux/report/404
@@ -0,0 +1,55 @@
+TITLE: BUG: MAX_STACK_TRACE_ENTRIES too low!
+
+[ 3167.402179][T32668] BUG: MAX_STACK_TRACE_ENTRIES too low!
+[ 3167.407738][T32668] turning off the locking correctness validator.
+[ 3167.414046][T32668] CPU: 1 PID: 32668 Comm: kworker/1:1 Not tainted 5.2.0-rc6+ #15
+[ 3167.421733][T32668] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[ 3167.431773][T32668] Workqueue: usb_hub_wq hub_event
+[ 3167.436772][T32668] Call Trace:
+[ 3167.440048][T32668]  dump_stack+0xca/0x13e
+[ 3167.444285][T32668]  save_trace.isra.0.cold+0x11/0x19
+[ 3167.449472][T32668]  mark_lock+0x2b9/0x10c0
+[ 3167.453779][T32668]  ? print_shortest_lock_dependencies+0x80/0x80
+[ 3167.460005][T32668]  __lock_acquire+0x54a/0x5340
+[ 3167.464743][T32668]  ? __lock_acquire+0x54a/0x5340
+[ 3167.469659][T32668]  ? find_held_lock+0x2d/0x110
+[ 3167.474399][T32668]  ? __free_object+0xdd/0x1e0
+[ 3167.479050][T32668]  ? mark_held_locks+0xe0/0xe0
+[ 3167.483785][T32668]  ? mark_held_locks+0xe0/0xe0
+[ 3167.488526][T32668]  ? _raw_spin_unlock_irqrestore+0x3e/0x50
+[ 3167.494305][T32668]  ? lockdep_hardirqs_on+0x379/0x580
+[ 3167.499577][T32668]  ? __lock_acquire+0x54a/0x5340
+[ 3167.504577][T32668]  lock_acquire+0x100/0x2b0
+[ 3167.509055][T32668]  ? flush_workqueue+0xf7/0x14c0
+[ 3167.513964][T32668]  flush_workqueue+0x126/0x14c0
+[ 3167.518796][T32668]  ? flush_workqueue+0xf7/0x14c0
+[ 3167.523705][T32668]  ? mark_held_locks+0xe0/0xe0
+[ 3167.528449][T32668]  ? __mutex_lock+0x3a2/0x12b0
+[ 3167.533185][T32668]  ? find_held_lock+0x2d/0x110
+[ 3167.537923][T32668]  ? __pm_runtime_resume+0x111/0x180
+[ 3167.543180][T32668]  ? max_active_store+0x120/0x120
+[ 3167.548178][T32668]  ? _raw_spin_unlock_irqrestore+0x3e/0x50
+[ 3167.553973][T32668]  ? lockdep_hardirqs_on+0x379/0x580
+[ 3167.559232][T32668]  ? scsi_remove_host+0x12d/0x360
+[ 3167.564229][T32668]  scsi_remove_host+0x12d/0x360
+[ 3167.569055][T32668]  usb_stor_disconnect+0x106/0x230
+[ 3167.574160][T32668]  usb_unbind_interface+0x1bd/0x8a0
+[ 3167.579330][T32668]  ? usb_autoresume_device+0x60/0x60
+[ 3167.584590][T32668]  device_release_driver_internal+0x404/0x4c0
+[ 3167.590627][T32668]  bus_remove_device+0x2dc/0x4a0
+[ 3167.595541][T32668]  device_del+0x460/0xb80
+[ 3167.599845][T32668]  ? __device_links_no_driver+0x240/0x240
+[ 3167.605539][T32668]  ? usb_remove_ep_devs+0x3e/0x80
+[ 3167.610536][T32668]  ? remove_intf_ep_devs+0x13f/0x1d0
+[ 3167.615794][T32668]  usb_disable_device+0x211/0x690
+[ 3167.620795][T32668]  usb_disconnect+0x284/0x830
+[ 3167.625457][T32668]  hub_event+0x13bd/0x3550
+[ 3167.629848][T32668]  ? hub_port_debounce+0x260/0x260
+[ 3167.634934][T32668]  process_one_work+0x905/0x1570
+[ 3167.639851][T32668]  ? pwq_dec_nr_in_flight+0x310/0x310
+[ 3167.645196][T32668]  ? do_raw_spin_lock+0x11a/0x280
+[ 3167.650210][T32668]  worker_thread+0x96/0xe20
+[ 3167.654704][T32668]  ? process_one_work+0x1570/0x1570
+[ 3167.659881][T32668]  kthread+0x30b/0x410
+[ 3167.663925][T32668]  ? kthread_park+0x1a0/0x1a0
+[ 3167.668574][T32668]  ret_from_fork+0x24/0x30
diff --git a/pkg/report/testdata/linux/report/405 b/pkg/report/testdata/linux/report/405
new file mode 100644
index 0000000..e36dfcf
--- /dev/null
+++ b/pkg/report/testdata/linux/report/405
@@ -0,0 +1,73 @@
+TITLE: WARNING: refcount bug in cdev_get
+
+[ 1191.409330][ T6711] ------------[ cut here ]------------
+[ 1191.414962][ T6711] refcount_t: increment on 0; use-after-free.
+[ 1191.421477][ T6711] WARNING: CPU: 1 PID: 6711 at lib/refcount.c:156 refcount_inc_checked+0x59/0x60
+[ 1191.430701][ T6711] Kernel panic - not syncing: panic_on_warn set ...
+[ 1191.437319][ T6711] CPU: 1 PID: 6711 Comm: syz-executor.0 Not tainted 5.3.0-rc2+ #25
+[ 1191.446758][ T6711] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[ 1191.456844][ T6711] Call Trace:
+[ 1191.460354][ T6711]  dump_stack+0xca/0x13e
+[ 1191.464733][ T6711]  ? refcount_inc_not_zero_checked+0x170/0x1e0
+[ 1191.470914][ T6711]  panic+0x2a3/0x6da
+[ 1191.474838][ T6711]  ? add_taint.cold+0x16/0x16
+[ 1191.479610][ T6711]  ? __probe_kernel_read+0x188/0x1d0
+[ 1191.485106][ T6711]  ? __warn.cold+0x5/0x4a
+[ 1191.489637][ T6711]  ? __warn+0xe3/0x1e0
+[ 1191.493740][ T6711]  ? refcount_inc_checked+0x59/0x60
+[ 1191.498954][ T6711]  __warn.cold+0x20/0x4a
+[ 1191.503221][ T6711]  ? refcount_inc_checked+0x59/0x60
+[ 1191.508433][ T6711]  report_bug+0x262/0x2a0
+[ 1191.512960][ T6711]  do_error_trap+0x12b/0x1e0
+[ 1191.517566][ T6711]  ? refcount_inc_checked+0x59/0x60
+[ 1191.522782][ T6711]  do_invalid_op+0x32/0x40
+[ 1191.527314][ T6711]  ? refcount_inc_checked+0x59/0x60
+[ 1191.532585][ T6711]  invalid_op+0x23/0x30
+[ 1191.536851][ T6711] RIP: 0010:refcount_inc_checked+0x59/0x60
+[ 1191.542859][ T6711] Code: 1d 78 8f a7 05 31 ff 89 de e8 53 49 5d ff 84 db 75 e0 e8 1a 48 5d ff 48 c7 c7 40 c1 da 85 c6 05 58 8f a7 05 01 e8 3c 19 33 ff <0f> 0b eb c4 90 90 90 41 57 41 56 41 55 49 89 fd 41 54 55 48 89 f5
+[ 1191.562935][ T6711] RSP: 0018:ffff8881c853f958 EFLAGS: 00010282
+[ 1191.569024][ T6711] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
+[ 1191.577101][ T6711] RDX: 0000000000000000 RSI: ffffffff8128a0fd RDI: ffffed10390a7f1d
+[ 1191.585205][ T6711] RBP: ffff8881d660b938 R08: ffff8881d55f9800 R09: fffffbfff11acd9c
+[ 1191.593190][ T6711] R10: fffffbfff11acd9b R11: ffffffff88d66cdf R12: ffff8881d660b900
+[ 1191.601180][ T6711] R13: 0000000000000000 R14: ffff8881ca2bbc20 R15: ffff8881c8a391fc
+[ 1191.609481][ T6711]  ? vprintk_func+0x7d/0x113
+[ 1191.614095][ T6711]  ? refcount_inc_checked+0x59/0x60
+[ 1191.619471][ T6711]  kobject_get+0x62/0xc0
+[ 1191.623771][ T6711]  cdev_get+0x5c/0xb0
+[ 1191.627873][ T6711]  chrdev_open+0xaa/0x5c0
+[ 1191.632370][ T6711]  ? rwlock_bug.part.0+0x90/0x90
+[ 1191.637480][ T6711]  ? cdev_put.part.0+0x50/0x50
+[ 1191.642500][ T6711]  do_dentry_open+0x494/0x1120
+[ 1191.647333][ T6711]  ? cdev_put.part.0+0x50/0x50
+[ 1191.652114][ T6711]  ? chmod_common+0x3c0/0x3c0
+[ 1191.656956][ T6711]  ? inode_permission+0xbe/0x3a0
+[ 1191.661919][ T6711]  path_openat+0x1430/0x3f50
+[ 1191.666573][ T6711]  ? save_stack+0x1b/0x80
+[ 1191.670919][ T6711]  ? do_sys_open+0x294/0x580
+[ 1191.675682][ T6711]  ? do_syscall_64+0xb7/0x580
+[ 1191.680373][ T6711]  ? path_lookupat.isra.0+0x8d0/0x8d0
+[ 1191.685760][ T6711]  ? __lock_acquire+0x145e/0x3b50
+[ 1191.691048][ T6711]  do_filp_open+0x1a1/0x280
+[ 1191.695649][ T6711]  ? may_open_dev+0xf0/0xf0
+[ 1191.700186][ T6711]  ? __alloc_fd+0x46d/0x600
+[ 1191.704706][ T6711]  ? do_raw_spin_lock+0x11a/0x280
+[ 1191.709740][ T6711]  ? do_raw_spin_unlock+0x50/0x220
+[ 1191.715066][ T6711]  ? _raw_spin_unlock+0x1f/0x30
+[ 1191.719942][ T6711]  ? __alloc_fd+0x46d/0x600
+[ 1191.724460][ T6711]  do_sys_open+0x3c0/0x580
+[ 1191.728893][ T6711]  ? filp_open+0x70/0x70
+[ 1191.733238][ T6711]  ? __ia32_sys_clock_settime+0x260/0x260
+[ 1191.739119][ T6711]  ? trace_hardirqs_off_caller+0x55/0x1e0
+[ 1191.744853][ T6711]  do_syscall_64+0xb7/0x580
+[ 1191.749387][ T6711]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[ 1191.755550][ T6711] RIP: 0033:0x413711
+[ 1191.759460][ T6711] Code: 75 14 b8 02 00 00 00 0f 05 48 3d 01 f0 ff ff 0f 83 04 19 00 00 c3 48 83 ec 08 e8 0a fa ff ff 48 89 04 24 b8 02 00 00 00 0f 05 <48> 8b 3c 24 48 89 c2 e8 53 fa ff ff 48 89 d0 48 83 c4 08 48 3d 01
+[ 1191.779203][ T6711] RSP: 002b:00007fcd70ca27a0 EFLAGS: 00000293 ORIG_RAX: 0000000000000002
+[ 1191.787902][ T6711] RAX: ffffffffffffffda RBX: 6666666666666667 RCX: 0000000000413711
+[ 1191.795895][ T6711] RDX: 0000000000000000 RSI: 0000000000000000 RDI: 00007fcd70ca2850
+[ 1191.803887][ T6711] RBP: 000000000075bf20 R08: 000000000000000f R09: 0000000000000000
+[ 1191.812072][ T6711] R10: 0000000000000000 R11: 0000000000000293 R12: 00007fcd70ca36d4
+[ 1191.820263][ T6711] R13: 00000000004c8bc7 R14: 00000000004dfa58 R15: 00000000ffffffff
+[ 1191.829087][ T6711] Kernel Offset: disabled
+[ 1191.833487][ T6711] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/406 b/pkg/report/testdata/linux/report/406
new file mode 100644
index 0000000..ff7236a
--- /dev/null
+++ b/pkg/report/testdata/linux/report/406
@@ -0,0 +1,74 @@
+TITLE: WARNING: refcount bug in hci_register_dev
+
+[   83.882482][T10363] ------------[ cut here ]------------
+[   83.894883][T10363] refcount_t: increment on 0; use-after-free.
+[   83.901740][T10363] WARNING: CPU: 0 PID: 10363 at lib/refcount.c:156 refcount_inc_checked+0x61/0x70
+[   83.911146][T10363] Kernel panic - not syncing: panic_on_warn set ...
+[   83.917719][T10363] CPU: 0 PID: 10363 Comm: syz-executor494 Not tainted 5.3.0-rc2+ #112
+[   83.925858][T10363] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   83.936006][T10363] Call Trace:
+[   83.939303][T10363]  dump_stack+0x172/0x1f0
+[   83.943651][T10363]  ? refcount_inc_not_zero_checked+0x180/0x200
+[   83.949907][T10363]  panic+0x2dc/0x755
+[   83.954073][T10363]  ? add_taint.cold+0x16/0x16
+[   83.958747][T10363]  ? __kasan_check_write+0x14/0x20
+[   83.963852][T10363]  ? __warn.cold+0x5/0x4c
+[   83.968333][T10363]  ? __warn+0xe7/0x1e0
+[   83.972417][T10363]  ? refcount_inc_checked+0x61/0x70
+[   83.977794][T10363]  __warn.cold+0x20/0x4c
+[   83.982051][T10363]  ? refcount_inc_checked+0x61/0x70
+[   83.987235][T10363]  report_bug+0x263/0x2b0
+[   83.991664][T10363]  do_error_trap+0x11b/0x200
+[   83.996328][T10363]  do_invalid_op+0x37/0x50
+[   84.000735][T10363]  ? refcount_inc_checked+0x61/0x70
+[   84.005920][T10363]  invalid_op+0x23/0x30
+[   84.010085][T10363] RIP: 0010:refcount_inc_checked+0x61/0x70
+[   84.015875][T10363] Code: 1d 5e 90 64 06 31 ff 89 de e8 eb 99 35 fe 84 db 75 dd e8 a2 98 35 fe 48 c7 c7 80 03 c6 87 c6 05 3e 90 64 06 01 e8 57 05 07 fe <0f> 0b eb c1 90 90 90 90 90 90 90 90 90 90 90 55 48 89 e5 41 57 41
+[   84.035461][T10363] RSP: 0018:ffff8880a818f8f8 EFLAGS: 00010286
+[   84.041508][T10363] RAX: 0000000000000000 RBX: 0000000000000000 RCX: 0000000000000000
+[   84.049467][T10363] RDX: 0000000000000000 RSI: ffffffff815c5216 RDI: ffffed1015031f11
+[   84.057421][T10363] RBP: ffff8880a818f908 R08: ffff8880a7e70300 R09: ffffed1015d04101
+[   84.065383][T10363] R10: ffffed1015d04100 R11: ffff8880ae820807 R12: ffff88821adec338
+[   84.073527][T10363] R13: ffff888094299820 R14: ffff888094299818 R15: ffff88821adec2b8
+[   84.081510][T10363]  ? vprintk_func+0x86/0x189
+[   84.086215][T10363]  ? refcount_inc_checked+0x61/0x70
+[   84.091419][T10363]  kobject_get+0x66/0xc0
+[   84.095671][T10363]  kobject_add_internal+0x14f/0x380
+[   84.100884][T10363]  ? kfree_const+0x5e/0x70
+[   84.105300][T10363]  kobject_add+0x150/0x1c0
+[   84.109731][T10363]  ? kset_create_and_add+0x1a0/0x1a0
+[   84.115124][T10363]  ? kasan_kmalloc+0x9/0x10
+[   84.119630][T10363]  ? kmem_cache_alloc_trace+0x346/0x790
+[   84.125165][T10363]  get_device_parent.isra.0+0x413/0x560
+[   84.130695][T10363]  device_add+0x2df/0x17a0
+[   84.135098][T10363]  ? get_device_parent.isra.0+0x560/0x560
+[   84.140797][T10363]  ? up_write+0x9d/0x280
+[   84.145023][T10363]  hci_register_dev+0x2e8/0x8f0
+[   84.149891][T10363]  __vhci_create_device+0x2c5/0x5d0
+[   84.155097][T10363]  vhci_write+0x2d0/0x470
+[   84.159410][T10363]  new_sync_write+0x4d3/0x770
+[   84.164079][T10363]  ? new_sync_read+0x800/0x800
+[   84.168857][T10363]  ? common_file_perm+0x238/0x720
+[   84.173877][T10363]  ? __kasan_check_read+0x11/0x20
+[   84.178900][T10363]  ? apparmor_file_permission+0x25/0x30
+[   84.184451][T10363]  ? __sanitizer_cov_trace_const_cmp4+0x16/0x20
+[   84.190690][T10363]  ? security_file_permission+0x8f/0x380
+[   84.196306][T10363]  __vfs_write+0xe1/0x110
+[   84.200620][T10363]  vfs_write+0x268/0x5d0
+[   84.204844][T10363]  ksys_write+0x14f/0x290
+[   84.209193][T10363]  ? __ia32_sys_read+0xb0/0xb0
+[   84.213943][T10363]  ? __sanitizer_cov_trace_const_cmp4+0x16/0x20
+[   84.220179][T10363]  ? entry_SYSCALL_64_after_hwframe+0x3e/0xbe
+[   84.226325][T10363]  __x64_sys_write+0x73/0xb0
+[   84.230926][T10363]  do_syscall_64+0xfd/0x6a0
+[   84.235415][T10363]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[   84.241327][T10363] RIP: 0033:0x441279
+[   84.245225][T10363] Code: e8 ac e8 ff ff 48 83 c4 18 c3 0f 1f 80 00 00 00 00 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 eb 08 fc ff c3 66 2e 0f 1f 84 00 00 00 00
+[   84.264855][T10363] RSP: 002b:00007fffdebca038 EFLAGS: 00000246 ORIG_RAX: 0000000000000001
+[   84.273275][T10363] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000441279
+[   84.281251][T10363] RDX: 0000000000000002 RSI: 0000000020000000 RDI: 0000000000000003
+[   84.289237][T10363] RBP: 0000000000014777 R08: 00000000004002c8 R09: 00000000004002c8
+[   84.297234][T10363] R10: 0000000000000004 R11: 0000000000000246 R12: 0000000000401ff0
+[   84.305317][T10363] R13: 0000000000402080 R14: 0000000000000000 R15: 0000000000000000
+[   84.314420][T10363] Kernel Offset: disabled
+[   84.318949][T10363] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/407 b/pkg/report/testdata/linux/report/407
new file mode 100644
index 0000000..d2b8a15
--- /dev/null
+++ b/pkg/report/testdata/linux/report/407
@@ -0,0 +1,90 @@
+TITLE: WARNING: kobject bug in netdev_register_kobject
+
+[   24.413160] ------------[ cut here ]------------
+[   24.417920] WARNING: CPU: 0 PID: 1928 at lib/kobject.c:244 kobject_add_internal.cold.13+0xc8/0xe2
+[   24.426901] Kernel panic - not syncing: panic_on_warn set ...
+[   24.426901] 
+[   24.434238] CPU: 0 PID: 1928 Comm: syzkaller927371 Not tainted 4.14.31+ #2
+[   24.441222] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   24.450548] Call Trace:
+[   24.453109]  dump_stack+0x114/0x1cf
+[   24.456710]  ? show_regs_print_info+0x6a/0x6a
+[   24.461177]  ? _atomic_dec_and_lock+0x171/0x171
+[   24.465817]  ? kobject_add_internal.cold.13+0xc8/0xe2
+[   24.470981]  panic+0x1bb/0x3a0
+[   24.474164]  ? add_taint.cold.6+0x16/0x16
+[   24.478290]  ? kobject_add_internal.cold.13+0xc8/0xe2
+[   24.483451]  __warn.cold.9+0x149/0x186
+[   24.487317]  ? kobject_add_internal.cold.13+0xc8/0xe2
+[   24.492485]  report_bug+0x1f7/0x272
+[   24.496091]  do_error_trap+0x1c1/0x430
+[   24.499957]  ? vprintk_emit+0x23b/0x4e0
+[   24.503905]  ? math_error+0x3c0/0x3c0
+[   24.507680]  ? vprintk_emit+0x200/0x4e0
+[   24.511635]  ? trace_hardirqs_off_thunk+0x1a/0x1c
+[   24.516451]  do_invalid_op+0x20/0x30
+[   24.520145]  invalid_op+0x1b/0x40
+[   24.523599] RIP: 0010:kobject_add_internal.cold.13+0xc8/0xe2
+[   24.529380] RSP: 0018:ffff8801d28175c0 EFLAGS: 00010286
+[   24.534717] RAX: 0000000000000043 RBX: ffff8801d2c9c558 RCX: 0000000000000000
+[   24.541961] RDX: 0000000000000043 RSI: ffff8801dba1e3b8 RDI: ffffed003a502eae
+[   24.549202] RBP: ffff8801d28176b8 R08: ffff8801d4f753d8 R09: 0000000000000006
+[   24.556446] R10: ffff8801d4f74b40 R11: 0000000000000000 R12: ffffffff83adc840
+[   24.563689] R13: 00000000fffffff4 R14: ffff8801d777f888 R15: ffff8801d2c9c560
+[   24.570951]  ? kobj_ns_type_registered+0x50/0x50
+[   24.575678]  ? lock_release+0x8b0/0x8b0
+[   24.579626]  ? __raw_spin_lock_init+0x32/0x100
+[   24.584183]  ? klist_init+0xf8/0x1c0
+[   24.587873]  ? refcount_inc_not_zero+0xfd/0x170
+[   24.592529]  kobject_add+0x11f/0x180
+[   24.596215]  ? kset_create_and_add+0x170/0x170
+[   24.600772]  ? mutex_unlock+0x12/0x20
+[   24.604548]  device_add+0x390/0x1610
+[   24.608236]  ? dev_set_name+0xa9/0xd0
+[   24.612032]  ? device_private_init+0x240/0x240
+[   24.616591]  ? rtnl_is_locked+0x59/0xb0
+[   24.620537]  ? rtnl_kfree_skbs+0x70/0x70
+[   24.624573]  netdev_register_kobject+0x128/0x2ec
+[   24.629304]  register_netdevice+0x9ba/0xf20
+[   24.633602]  ? netdev_change_features+0x100/0x100
+[   24.638419]  ? __raw_spin_lock_init+0x21/0x100
+[   24.642973]  ? round_jiffies_up+0xfc/0x140
+[   24.647200]  ? __round_jiffies_up_relative+0x190/0x190
+[   24.652454]  __tun_chr_ioctl+0x2307/0x3e40
+[   24.656666]  ? tun_chr_read_iter+0x1e0/0x1e0
+[   24.661065]  ? get_pid_task+0xc5/0x140
+[   24.664947]  ? proc_fail_nth_write+0xbd/0x270
+[   24.669416]  ? proc_task_getattr+0x190/0x190
+[   24.673807]  ? find_held_lock+0x36/0x1c0
+[   24.677844]  ? vfs_write+0x266/0x500
+[   24.681531]  ? lock_downgrade+0x740/0x740
+[   24.685658]  ? kernel_read+0x130/0x130
+[   24.689533]  tun_chr_ioctl+0x2f/0x40
+[   24.693227]  ? tun_chr_compat_ioctl+0x40/0x40
+[   24.698050]  do_vfs_ioctl+0x1b7/0x15d0
+[   24.701912]  ? ioctl_preallocate+0x2c0/0x2c0
+[   24.706295]  ? fget_raw+0x20/0x20
+[   24.709723]  ? __sb_end_write+0xa5/0xd0
+[   24.713672]  ? vfs_write+0x222/0x500
+[   24.717358]  ? SyS_write+0x179/0x230
+[   24.721051]  ? security_file_ioctl+0x94/0xc0
+[   24.725431]  SyS_ioctl+0x94/0xc0
+[   24.728770]  ? do_vfs_ioctl+0x15d0/0x15d0
+[   24.732890]  do_syscall_64+0x251/0x6d0
+[   24.736752]  ? trace_hardirqs_on_thunk+0x1a/0x1c
+[   24.741482]  ? syscall_return_slowpath+0x330/0x330
+[   24.746385]  ? syscall_return_slowpath+0x217/0x330
+[   24.751308]  ? entry_SYSCALL_64_after_hwframe+0x52/0xb7
+[   24.756644]  ? trace_hardirqs_off_thunk+0x1a/0x1c
+[   24.761462]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
+[   24.766625] RIP: 0033:0x444179
+[   24.769792] RSP: 002b:00007ffcebc3f4b8 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
+[   24.777473] RAX: ffffffffffffffda RBX: 0000000000000000 RCX: 0000000000444179
+[   24.784720] RDX: 0000000020000180 RSI: 00000000400454ca RDI: 0000000000000003
+[   24.791963] RBP: 00000000006cf018 R08: 0000000000000001 R09: 00007ffcebc30035
+[   24.799214] R10: 0000000000000000 R11: 0000000000000246 R12: 0000000000000004
+[   24.806466] R13: ffffffffffffffff R14: 0000000000000000 R15: 0000000000000000
+[   24.814408] Dumping ftrace buffer:
+[   24.818034]    (ftrace buffer empty)
+[   24.822300] Kernel Offset: disabled
+[   24.825915] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/408 b/pkg/report/testdata/linux/report/408
new file mode 100644
index 0000000..f66029a
--- /dev/null
+++ b/pkg/report/testdata/linux/report/408
@@ -0,0 +1,82 @@
+TITLE: WARNING: refcount bug in input_register_device
+
+[  116.957737] ------------[ cut here ]------------
+[  116.963070] refcount_t: increment on 0; use-after-free.
+[  116.968562] WARNING: CPU: 1 PID: 4353 at lib/refcount.c:153 refcount_inc+0x47/0x50
+[  116.976271] Kernel panic - not syncing: panic_on_warn set ...
+[  116.976271] 
+[  116.983645] CPU: 1 PID: 4353 Comm: syz-executor5 Not tainted 4.14.89+ #6
+[  116.990488] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[  116.999846] Call Trace:
+[  117.002449]  dump_stack+0x114/0x1cf
+[  117.006086]  ? show_regs_print_info+0x6a/0x6a
+[  117.010593]  ? _atomic_dec_and_lock+0x171/0x171
+[  117.015311]  ? do_raw_spin_trylock+0x190/0x190
+[  117.019907]  ? refcount_inc+0x47/0x50
+[  117.023720]  panic+0x1bb/0x3a0
+[  117.026918]  ? add_taint.cold.6+0x16/0x16
+[  117.031077]  ? __warn.cold.9+0x5/0x46
+[  117.034887]  ? refcount_inc+0x47/0x50
+[  117.038733]  __warn.cold.9+0x20/0x46
+[  117.042485]  ? refcount_inc+0x47/0x50
+[  117.046293]  report_bug+0x1fd/0x272
+[  117.049928]  do_error_trap+0x1c2/0x430
+[  117.053825]  ? math_error+0x3e0/0x3e0
+[  117.057636]  ? vprintk_func+0x63/0xea
+[  117.061440]  ? printk+0xa3/0xbf
+[  117.064735]  ? show_regs_print_info+0x6a/0x6a
+[  117.069235]  ? trace_hardirqs_off_thunk+0x1a/0x1c
+[  117.074091]  do_invalid_op+0x20/0x30
+[  117.077813]  invalid_op+0x1b/0x40
+[  117.081277] RIP: 0010:refcount_inc+0x47/0x50
+[  117.085913] RSP: 0018:ffff8881c966f878 EFLAGS: 00010282
+[  117.085949] RAX: 000000000000002b RBX: ffff8881d40fa500 RCX: ffffc9000207d000
+[  117.085958] RDX: 00000000000030e2 RSI: ffffffff812d86d3 RDI: ffff8881c966f3c0
+[  117.085966] RBP: ffff8881c966f880 R08: ffff8881a65421c8 R09: 0000000000000006
+[  117.085974] R10: 0000000000000000 R11: ffff8881a6541900 R12: dffffc0000000000
+[  117.085981] R13: ffff8881d40fa4d0 R14: ffff8881d2b7bfc0 R15: ffff8881da3217c8
+[  117.086009]  ? vprintk_func+0x63/0xea
+[  117.131534]  ? refcount_inc+0x47/0x50
+[  117.135349]  kobject_get+0x50/0xa0
+[  117.139493]  get_device_parent.isra.27+0x3e0/0x5a0
+[  117.144452]  device_add+0x301/0x1620
+[  117.144471]  ? device_private_init+0x240/0x240
+[  117.144502]  ? __kmalloc+0x17f/0x380
+[  117.144520]  input_register_device+0x660/0xbb0
+[  117.144546]  ? devm_input_allocate_device+0x130/0x130
+[  117.144559]  ? lock_release+0x920/0x920
+[  117.144577]  uinput_ioctl_handler.isra.9+0x9f3/0x1fe0
+[  117.144591]  ? uinput_request_submit.part.8+0x290/0x290
+[  117.144613]  ? __fget+0x37b/0x580
+[  117.144622]  ? lock_downgrade+0x700/0x700
+[  117.144640]  ? expand_files.part.8+0x850/0x850
+[  117.144656]  ? static_key_enable.constprop.102+0x1b0/0x1b0
+[  117.144672]  ? uinput_compat_ioctl+0x80/0x80
+[  117.144681]  uinput_ioctl+0x51/0x60
+[  117.144695]  do_vfs_ioctl+0x1a4/0x1540
+[  117.144713]  ? ioctl_preallocate+0x2c0/0x2c0
+[  117.144726]  ? fget_raw+0x20/0x20
+[  117.144739]  ? put_timespec64+0x103/0x190
+[  117.144749]  ? nsecs_to_jiffies+0x30/0x30
+[  117.144788]  ? SyS_clock_gettime+0x111/0x1c0
+[  117.144802]  ? security_file_ioctl+0x94/0xc0
+[  117.144818]  SyS_ioctl+0x94/0xc0
+[  117.144830]  ? do_vfs_ioctl+0x1540/0x1540
+[  117.144843]  do_syscall_64+0x251/0x750
+[  117.144857]  ? copy_overflow+0x20/0x20
+[  117.144868]  ? syscall_return_slowpath+0x3b0/0x3b0
+[  117.144881]  ? syscall_return_slowpath+0x220/0x3b0
+[  117.144893]  ? __switch_to_asm+0x34/0x70
+[  117.144906]  ? prepare_exit_to_usermode+0x270/0x270
+[  117.144920]  ? entry_SYSCALL_64_after_hwframe+0x52/0xb7
+[  117.144936]  ? trace_hardirqs_off_thunk+0x1a/0x1c
+[  117.144956]  entry_SYSCALL_64_after_hwframe+0x42/0xb7
+[  117.144964] RIP: 0033:0x457669
+[  117.144970] RSP: 002b:00007fb14c000c78 EFLAGS: 00000246 ORIG_RAX: 0000000000000010
+[  117.144982] RAX: ffffffffffffffda RBX: 0000000000000002 RCX: 0000000000457669
+[  117.144989] RDX: 0000000000000000 RSI: 0000000000005501 RDI: 0000000000000004
+[  117.144995] RBP: 000000000072bfa0 R08: 0000000000000000 R09: 0000000000000000
+[  117.145003] R10: 0000000000000000 R11: 0000000000000246 R12: 00007fb14c0016d4
+[  117.145010] R13: 00000000004c17af R14: 00000000004d3390 R15: 00000000ffffffff
+[  117.146088] Kernel Offset: disabled
+[  117.336935] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/409 b/pkg/report/testdata/linux/report/409
new file mode 100644
index 0000000..95933e2
--- /dev/null
+++ b/pkg/report/testdata/linux/report/409
@@ -0,0 +1,62 @@
+TITLE: WARNING: ODEBUG bug in usbhid_disconnect
+
+[   40.696563][   T21] ------------[ cut here ]------------
+[   40.702869][   T21] ODEBUG: free active (active state 0) object type: timer_list hint: hid_retry_timeout+0x0/0xd0
+[   40.713321][   T21] WARNING: CPU: 1 PID: 21 at lib/debugobjects.c:325 debug_print_object+0x160/0x250
+[   40.722757][   T21] Kernel panic - not syncing: panic_on_warn set ...
+[   40.729334][   T21] CPU: 1 PID: 21 Comm: kworker/1:1 Not tainted 5.2.0-rc6+ #15
+[   40.736767][   T21] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   40.746813][   T21] Workqueue: usb_hub_wq hub_event
+[   40.751813][   T21] Call Trace:
+[   40.755139][   T21]  dump_stack+0xca/0x13e
+[   40.759374][   T21]  ? debug_print_object+0xe0/0x250
+[   40.764470][   T21]  panic+0x292/0x6c9
+[   40.768354][   T21]  ? __warn_printk+0xf3/0xf3
+[   40.772932][   T21]  ? debug_print_object+0x160/0x250
+[   40.778109][   T21]  ? __probe_kernel_read+0x16c/0x1b0
+[   40.783375][   T21]  ? __warn.cold+0x5/0x4b
+[   40.787687][   T21]  ? __warn+0xe4/0x1c0
+[   40.791732][   T21]  ? debug_print_object+0x160/0x250
+[   40.796910][   T21]  __warn.cold+0x20/0x4b
+[   40.801134][   T21]  ? debug_print_object+0x160/0x250
+[   40.806422][   T21]  report_bug+0x262/0x2a0
+[   40.810744][   T21]  do_error_trap+0x12b/0x1e0
+[   40.815334][   T21]  ? debug_print_object+0x160/0x250
+[   40.820520][   T21]  do_invalid_op+0x32/0x40
+[   40.824919][   T21]  ? debug_print_object+0x160/0x250
+[   40.830100][   T21]  invalid_op+0x14/0x20
+[   40.834325][   T21] RIP: 0010:debug_print_object+0x160/0x250
+[   40.840106][   T21] Code: dd e0 16 ba 85 48 89 fa 48 c1 ea 03 80 3c 02 00 0f 85 bf 00 00 00 48 8b 14 dd e0 16 ba 85 48 c7 c7 c0 0c ba 85 e8 db c7 33 ff <0f> 0b 83 05 03 6e 86 05 01 48 83 c4 20 5b 5d 41 5c 41 5d c3 48 89
+[   40.859705][   T21] RSP: 0018:ffff8881d9eff710 EFLAGS: 00010086
+[   40.865792][   T21] RAX: 0000000000000000 RBX: 0000000000000003 RCX: 0000000000000000
+[   40.873757][   T21] RDX: 0000000000000000 RSI: ffffffff8127ef3d RDI: ffffed103b3dfed4
+[   40.881741][   T21] RBP: 0000000000000001 R08: ffff8881d9e36000 R09: ffffed103b663ed7
+[   40.889697][   T21] R10: ffffed103b663ed6 R11: ffff8881db31f6b7 R12: ffffffff86b04760
+[   40.897656][   T21] R13: ffffffff812db3c0 R14: ffffffff88f4bae8 R15: ffff8881d0e1a8c8
+[   40.905626][   T21]  ? calc_wheel_index+0x220/0x220
+[   40.910641][   T21]  ? vprintk_func+0x7d/0x113
+[   40.915222][   T21]  debug_check_no_obj_freed+0x2a3/0x42e
+[   40.920755][   T21]  __free_pages_ok+0x215/0x1bb0
+[   40.925597][   T21]  ? usbhid_disconnect+0x98/0xd0
+[   40.930522][   T21]  ? rcu_read_lock_sched_held+0x113/0x130
+[   40.936254][   T21]  usbhid_disconnect+0x98/0xd0
+[   40.941010][   T21]  usb_unbind_interface+0x1bd/0x8a0
+[   40.946197][   T21]  ? usb_autoresume_device+0x60/0x60
+[   40.951469][   T21]  device_release_driver_internal+0x404/0x4c0
+[   40.957530][   T21]  bus_remove_device+0x2dc/0x4a0
+[   40.962454][   T21]  device_del+0x460/0xb80
+[   40.966776][   T21]  ? __device_links_no_driver+0x240/0x240
+[   40.972502][   T21]  ? usb_remove_ep_devs+0x3e/0x80
+[   40.977618][   T21]  ? remove_intf_ep_devs+0x13f/0x1d0
+[   40.982892][   T21]  usb_disable_device+0x211/0x690
+[   40.987905][   T21]  usb_disconnect+0x284/0x830
+[   40.992571][   T21]  hub_event+0x13bd/0x3550
+[   40.997067][   T21]  ? hub_port_debounce+0x260/0x260
+[   41.002171][   T21]  process_one_work+0x905/0x1570
+[   41.007104][   T21]  ? pwq_dec_nr_in_flight+0x310/0x310
+[   41.012472][   T21]  ? do_raw_spin_lock+0x11a/0x280
+[   41.017498][   T21]  worker_thread+0x96/0xe20
+[   41.022016][   T21]  ? process_one_work+0x1570/0x1570
+[   41.027211][   T21]  kthread+0x30b/0x410
+[   41.031295][   T21]  ? kthread_park+0x1a0/0x1a0
+[   41.035965][   T21]  ret_from_fork+0x24/0x30
diff --git a/pkg/report/testdata/linux/report/410 b/pkg/report/testdata/linux/report/410
new file mode 100644
index 0000000..1cb9bf3
--- /dev/null
+++ b/pkg/report/testdata/linux/report/410
@@ -0,0 +1,155 @@
+TITLE: KASAN: use-after-free Read in hiddev_read
+
+[  501.875843][ T9186] ==================================================================
+[  501.883925][ T9186] BUG: KASAN: use-after-free in __lock_acquire+0x302a/0x3b50
+[  501.891279][ T9186] Read of size 8 at addr ffff8881d2bec328 by task syz-executor.4/9186
+[  501.899408][ T9186] 
+[  501.901720][ T9186] CPU: 1 PID: 9186 Comm: syz-executor.4 Not tainted 5.3.0-rc4+ #26
+[  501.909584][ T9186] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[  501.919617][ T9186] Call Trace:
+[  501.922891][ T9186]  dump_stack+0xca/0x13e
+[  501.927205][ T9186]  ? __lock_acquire+0x302a/0x3b50
+[  501.932208][ T9186]  ? __lock_acquire+0x302a/0x3b50
+[  501.937386][ T9186]  print_address_description+0x6a/0x32c
+[  501.943011][ T9186]  ? __lock_acquire+0x302a/0x3b50
+[  501.948027][ T9186]  ? __lock_acquire+0x302a/0x3b50
+[  501.953037][ T9186]  __kasan_report.cold+0x1a/0x33
+[  501.957975][ T9186]  ? __lock_acquire+0x302a/0x3b50
+[  501.962995][ T9186]  kasan_report+0xe/0x12
+[  501.967223][ T9186]  __lock_acquire+0x302a/0x3b50
+[  501.972052][ T9186]  ? __mutex_lock+0x430/0x1360
+[  501.976800][ T9186]  ? lockdep_hardirqs_on+0x379/0x580
+[  501.982076][ T9186]  ? mark_held_locks+0xe0/0xe0
+[  501.986833][ T9186]  ? finish_task_switch+0xef/0x5a0
+[  501.991940][ T9186]  ? mutex_trylock+0x2c0/0x2c0
+[  501.996706][ T9186]  lock_acquire+0x127/0x320
+[  502.001227][ T9186]  ? finish_wait+0xb2/0x260
+[  502.005747][ T9186]  _raw_spin_lock_irqsave+0x32/0x50
+[  502.010938][ T9186]  ? finish_wait+0xb2/0x260
+[  502.015417][ T9186]  finish_wait+0xb2/0x260
+[  502.019727][ T9186]  hiddev_read+0x89d/0xbd0
+[  502.024128][ T9186]  ? hiddev_ioctl_usage.isra.0+0x13b0/0x13b0
+[  502.030087][ T9186]  ? finish_wait+0x260/0x260
+[  502.034763][ T9186]  ? security_file_permission+0x8a/0x370
+[  502.040382][ T9186]  ? hiddev_ioctl_usage.isra.0+0x13b0/0x13b0
+[  502.046372][ T9186]  __vfs_read+0x76/0x100
+[  502.050592][ T9186]  vfs_read+0x1ea/0x430
+[  502.054731][ T9186]  ksys_read+0x127/0x250
+[  502.058971][ T9186]  ? kernel_write+0x120/0x120
+[  502.063636][ T9186]  ? __ia32_sys_clock_settime+0x260/0x260
+[  502.069398][ T9186]  ? trace_hardirqs_off_caller+0x55/0x1e0
+[  502.075096][ T9186]  do_syscall_64+0xb7/0x580
+[  502.079579][ T9186]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[  502.085444][ T9186] RIP: 0033:0x459829
+[  502.089321][ T9186] Code: fd b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00 00 66 90 48 89 f8 48 89 f7 48 89 d6 48 89 ca 4d 89 c2 4d 89 c8 4c 8b 4c 24 08 0f 05 <48> 3d 01 f0 ff ff 0f 83 cb b7 fb ff c3 66 2e 0f 1f 84 00 00 00 00
+[  502.108917][ T9186] RSP: 002b:00007fab15b5ec78 EFLAGS: 00000246 ORIG_RAX: 0000000000000000
+[  502.117329][ T9186] RAX: ffffffffffffffda RBX: 0000000000000003 RCX: 0000000000459829
+[  502.125309][ T9186] RDX: 0000000000000015 RSI: 0000000020000080 RDI: 0000000000000003
+[  502.133274][ T9186] RBP: 000000000075bf20 R08: 0000000000000000 R09: 0000000000000000
+[  502.141235][ T9186] R10: 0000000000000000 R11: 0000000000000246 R12: 00007fab15b5f6d4
+[  502.149188][ T9186] R13: 00000000004c6c66 R14: 00000000004dbf70 R15: 00000000ffffffff
+[  502.157159][ T9186] 
+[  502.159473][ T9186] Allocated by task 2740:
+[  502.163784][ T9186]  save_stack+0x1b/0x80
+[  502.167922][ T9186]  __kasan_kmalloc.constprop.0+0xbf/0xd0
+[  502.173535][ T9186]  hiddev_connect+0x242/0x5b0
+[  502.178192][ T9186]  hid_connect+0x239/0xbb0
+[  502.182586][ T9186]  hid_hw_start+0xa2/0x130
+[  502.186994][ T9186]  appleir_probe+0x13e/0x1a0
+[  502.191604][ T9186]  hid_device_probe+0x2be/0x3f0
+[  502.196434][ T9186]  really_probe+0x281/0x6d0
+[  502.200910][ T9186]  driver_probe_device+0x101/0x1b0
+[  502.206018][ T9186]  __device_attach_driver+0x1c2/0x220
+[  502.211368][ T9186]  bus_for_each_drv+0x162/0x1e0
+[  502.216193][ T9186]  __device_attach+0x217/0x360
+[  502.220930][ T9186]  bus_probe_device+0x1e4/0x290
+[  502.225751][ T9186]  device_add+0xae6/0x16f0
+[  502.230141][ T9186]  hid_add_device+0x33c/0x990
+[  502.234822][ T9186]  usbhid_probe+0xa81/0xfa0
+[  502.239317][ T9186]  usb_probe_interface+0x305/0x7a0
+[  502.244404][ T9186]  really_probe+0x281/0x6d0
+[  502.248900][ T9186]  driver_probe_device+0x101/0x1b0
+[  502.253989][ T9186]  __device_attach_driver+0x1c2/0x220
+[  502.259334][ T9186]  bus_for_each_drv+0x162/0x1e0
+[  502.264163][ T9186]  __device_attach+0x217/0x360
+[  502.268903][ T9186]  bus_probe_device+0x1e4/0x290
+[  502.273728][ T9186]  device_add+0xae6/0x16f0
+[  502.278122][ T9186]  usb_set_configuration+0xdf6/0x1670
+[  502.283477][ T9186]  generic_probe+0x9d/0xd5
+[  502.287883][ T9186]  usb_probe_device+0x99/0x100
+[  502.292638][ T9186]  really_probe+0x281/0x6d0
+[  502.297115][ T9186]  driver_probe_device+0x101/0x1b0
+[  502.302210][ T9186]  __device_attach_driver+0x1c2/0x220
+[  502.307599][ T9186]  bus_for_each_drv+0x162/0x1e0
+[  502.312433][ T9186]  __device_attach+0x217/0x360
+[  502.317191][ T9186]  bus_probe_device+0x1e4/0x290
+[  502.322021][ T9186]  device_add+0xae6/0x16f0
+[  502.326435][ T9186]  usb_new_device.cold+0x6a4/0xe79
+[  502.331546][ T9186]  hub_event+0x1b5c/0x3640
+[  502.335936][ T9186]  process_one_work+0x92b/0x1530
+[  502.340860][ T9186]  worker_thread+0x96/0xe20
+[  502.345352][ T9186]  kthread+0x318/0x420
+[  502.349397][ T9186]  ret_from_fork+0x24/0x30
+[  502.353782][ T9186] 
+[  502.356085][ T9186] Freed by task 2740:
+[  502.360055][ T9186]  save_stack+0x1b/0x80
+[  502.364188][ T9186]  __kasan_slab_free+0x130/0x180
+[  502.369112][ T9186]  kfree+0xe4/0x2f0
+[  502.372898][ T9186]  hiddev_connect.cold+0x45/0x5c
+[  502.377814][ T9186]  hid_connect+0x239/0xbb0
+[  502.382209][ T9186]  hid_hw_start+0xa2/0x130
+[  502.386598][ T9186]  appleir_probe+0x13e/0x1a0
+[  502.391199][ T9186]  hid_device_probe+0x2be/0x3f0
+[  502.396033][ T9186]  really_probe+0x281/0x6d0
+[  502.400515][ T9186]  driver_probe_device+0x101/0x1b0
+[  502.405604][ T9186]  __device_attach_driver+0x1c2/0x220
+[  502.410951][ T9186]  bus_for_each_drv+0x162/0x1e0
+[  502.415808][ T9186]  __device_attach+0x217/0x360
+[  502.420546][ T9186]  bus_probe_device+0x1e4/0x290
+[  502.425378][ T9186]  device_add+0xae6/0x16f0
+[  502.429787][ T9186]  hid_add_device+0x33c/0x990
+[  502.434459][ T9186]  usbhid_probe+0xa81/0xfa0
+[  502.438964][ T9186]  usb_probe_interface+0x305/0x7a0
+[  502.444079][ T9186]  really_probe+0x281/0x6d0
+[  502.448625][ T9186]  driver_probe_device+0x101/0x1b0
+[  502.453738][ T9186]  __device_attach_driver+0x1c2/0x220
+[  502.459113][ T9186]  bus_for_each_drv+0x162/0x1e0
+[  502.463963][ T9186]  __device_attach+0x217/0x360
+[  502.468724][ T9186]  bus_probe_device+0x1e4/0x290
+[  502.473566][ T9186]  device_add+0xae6/0x16f0
+[  502.477962][ T9186]  usb_set_configuration+0xdf6/0x1670
+[  502.483332][ T9186]  generic_probe+0x9d/0xd5
+[  502.487724][ T9186]  usb_probe_device+0x99/0x100
+[  502.492462][ T9186]  really_probe+0x281/0x6d0
+[  502.496939][ T9186]  driver_probe_device+0x101/0x1b0
+[  502.502024][ T9186]  __device_attach_driver+0x1c2/0x220
+[  502.507376][ T9186]  bus_for_each_drv+0x162/0x1e0
+[  502.512214][ T9186]  __device_attach+0x217/0x360
+[  502.516952][ T9186]  bus_probe_device+0x1e4/0x290
+[  502.521774][ T9186]  device_add+0xae6/0x16f0
+[  502.526179][ T9186]  usb_new_device.cold+0x6a4/0xe79
+[  502.537376][ T9186]  hub_event+0x1b5c/0x3640
+[  502.545003][ T9186]  process_one_work+0x92b/0x1530
+[  502.553088][ T9186]  worker_thread+0x96/0xe20
+[  502.559520][ T9186]  kthread+0x318/0x420
+[  502.563805][ T9186]  ret_from_fork+0x24/0x30
+[  502.568194][ T9186] 
+[  502.570511][ T9186] The buggy address belongs to the object at ffff8881d2bec280
+[  502.570511][ T9186]  which belongs to the cache kmalloc-512 of size 512
+[  502.584563][ T9186] The buggy address is located 168 bytes inside of
+[  502.584563][ T9186]  512-byte region [ffff8881d2bec280, ffff8881d2bec480)
+[  502.597836][ T9186] The buggy address belongs to the page:
+[  502.603455][ T9186] page:ffffea00074afb00 refcount:1 mapcount:0 mapping:ffff8881da002500 index:0x0 compound_mapcount: 0
+[  502.614364][ T9186] flags: 0x200000000010200(slab|head)
+[  502.619739][ T9186] raw: 0200000000010200 ffffea000741fc80 0000000600000006 ffff8881da002500
+[  502.628303][ T9186] raw: 0000000000000000 00000000000c000c 00000001ffffffff 0000000000000000
+[  502.636880][ T9186] page dumped because: kasan: bad access detected
+[  502.643315][ T9186] 
+[  502.645617][ T9186] Memory state around the buggy address:
+[  502.651257][ T9186]  ffff8881d2bec200: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
+[  502.659293][ T9186]  ffff8881d2bec280: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  502.667334][ T9186] >ffff8881d2bec300: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  502.675368][ T9186]                                   ^
+[  502.680764][ T9186]  ffff8881d2bec380: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  502.688804][ T9186]  ffff8881d2bec400: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  502.696846][ T9186] ==================================================================
diff --git a/pkg/report/testdata/linux/report/411 b/pkg/report/testdata/linux/report/411
new file mode 100644
index 0000000..3d4a55e
--- /dev/null
+++ b/pkg/report/testdata/linux/report/411
@@ -0,0 +1,79 @@
+TITLE: WARNING in r871xu_dev_remove
+
+[   26.966491][  T101] ------------[ cut here ]------------
+[   26.974331][ T1737] usb 5-1: Direct firmware load for rtlwifi/rtl8712u.bin failed with error -2
+[   26.978202][  T101] WARNING: CPU: 0 PID: 101 at net/core/dev.c:8167 rollback_registered_many.cold+0x41/0x1bc
+[   26.987452][ T1737] usb 5-1: r8712u: Firmware request failed
+[   26.996887][  T101] Kernel panic - not syncing: panic_on_warn set ...
+[   26.996902][  T101] CPU: 0 PID: 101 Comm: kworker/0:2 Not tainted 5.3.0-rc4+ #26
+[   26.996910][  T101] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   26.996926][  T101] Workqueue: usb_hub_wq hub_event
+[   26.996933][  T101] Call Trace:
+[   26.996950][  T101]  dump_stack+0xca/0x13e
+[   26.996970][  T101]  ? rollback_registered_many.cold+0x4/0x1bc
+[   26.996988][  T101]  panic+0x2a3/0x6da
+[   27.003322][ T1737] usb 2-1: Direct firmware load for rtlwifi/rtl8712u.bin failed with error -2
+[   27.009556][  T101]  ? add_taint.cold+0x16/0x16
+[   27.009572][  T101]  ? __probe_kernel_read+0x188/0x1d0
+[   27.009583][  T101]  ? __warn.cold+0x5/0x4a
+[   27.009592][  T101]  ? __warn+0xe3/0x1e0
+[   27.009606][  T101]  ? rollback_registered_many.cold+0x41/0x1bc
+[   27.009615][  T101]  __warn.cold+0x20/0x4a
+[   27.009627][  T101]  ? __irq_work_queue_local+0xa3/0xe0
+[   27.009639][  T101]  ? rollback_registered_many.cold+0x41/0x1bc
+[   27.009651][  T101]  report_bug+0x262/0x2a0
+[   27.009671][  T101]  do_error_trap+0x12b/0x1e0
+[   27.034511][ T1737] usb 2-1: r8712u: Firmware request failed
+[   27.037337][  T101]  ? rollback_registered_many.cold+0x41/0x1bc
+[   27.037352][  T101]  do_invalid_op+0x32/0x40
+[   27.037366][  T101]  ? rollback_registered_many.cold+0x41/0x1bc
+[   27.037378][  T101]  invalid_op+0x23/0x30
+[   27.037398][  T101] RIP: 0010:rollback_registered_many.cold+0x41/0x1bc
+[   27.142564][  T101] Code: ff e8 c7 17 90 fc 48 c7 c7 00 e8 63 86 e8 24 b8 7a fc 0f 0b e9 93 be ff ff e8 af 17 90 fc 48 c7 c7 00 e8 63 86 e8 0c b8 7a fc <0f> 0b 4c 89 e7 e8 f9 0a 34 fd 31 ff 41 89 c4 89 c6 e8 bd 18 90 fc
+[   27.162178][  T101] RSP: 0018:ffff8881d505f6a8 EFLAGS: 00010286
+[   27.168229][  T101] RAX: 0000000000000024 RBX: ffff8881d2918000 RCX: 0000000000000000
+[   27.176185][  T101] RDX: 0000000000000000 RSI: ffffffff81288cfd RDI: ffffed103aa0bec7
+[   27.184168][  T101] RBP: ffff8881d505f7d8 R08: 0000000000000024 R09: ffffed103b645d58
+[   27.192164][  T101] R10: ffffed103b645d57 R11: ffff8881db22eabf R12: ffff8881d2918070
+[   27.200168][  T101] R13: ffff8881d505f768 R14: dffffc0000000000 R15: 0000000000000000
+[   27.208146][  T101]  ? vprintk_func+0x7d/0x113
+[   27.212725][  T101]  ? rollback_registered_many.cold+0x41/0x1bc
+[   27.218798][  T101]  ? generic_xdp_install+0x480/0x480
+[   27.224134][  T101]  ? __mutex_lock+0x430/0x1360
+[   27.228886][  T101]  ? do_raw_spin_lock+0x11a/0x280
+[   27.233931][  T101]  ? unregister_netdev+0xe/0x20
+[   27.238772][  T101]  ? mark_held_locks+0x9f/0xe0
+[   27.243538][  T101]  ? _raw_spin_unlock_irq+0x24/0x30
+[   27.248824][  T101]  ? mutex_trylock+0x2c0/0x2c0
+[   27.253605][  T101]  rollback_registered+0xf2/0x1c0
+[   27.258619][  T101]  ? rollback_registered_many+0xc70/0xc70
+[   27.264340][  T101]  ? wait_for_completion_interruptible+0x420/0x420
+[   27.271069][  T101]  ? wake_up_q+0xf0/0xf0
+[   27.275346][  T101]  unregister_netdevice_queue+0x1d7/0x2b0
+[   27.281338][  T101]  unregister_netdev+0x18/0x20
+[   27.286113][  T101]  r871xu_dev_remove+0xe2/0x215
+[   27.291003][  T101]  usb_unbind_interface+0x1bd/0x8a0
+[   27.296248][  T101]  ? usb_autoresume_device+0x60/0x60
+[   27.301608][  T101]  device_release_driver_internal+0x42f/0x500
+[   27.307702][  T101]  bus_remove_device+0x2dc/0x4a0
+[   27.312628][  T101]  device_del+0x420/0xb10
+[   27.317511][  T101]  ? __device_links_no_driver+0x240/0x240
+[   27.323349][  T101]  ? lockdep_hardirqs_on+0x379/0x580
+[   27.328733][  T101]  ? remove_intf_ep_devs+0x13f/0x1d0
+[   27.334034][  T101]  usb_disable_device+0x211/0x690
+[   27.339051][  T101]  usb_disconnect+0x284/0x8d0
+[   27.343966][  T101]  hub_event+0x1454/0x3640
+[   27.348381][  T101]  ? find_held_lock+0x2d/0x110
+[   27.353128][  T101]  ? mark_held_locks+0xe0/0xe0
+[   27.357885][  T101]  ? hub_port_debounce+0x260/0x260
+[   27.363039][  T101]  process_one_work+0x92b/0x1530
+[   27.367968][  T101]  ? pwq_dec_nr_in_flight+0x310/0x310
+[   27.369585][   T22] usb 1-1: new high-speed USB device number 3 using dummy_hcd
+[   27.373329][  T101]  ? do_raw_spin_lock+0x11a/0x280
+[   27.373343][  T101]  worker_thread+0x7ab/0xe20
+[   27.373358][  T101]  ? process_one_work+0x1530/0x1530
+[   27.373370][  T101]  kthread+0x318/0x420
+[   27.373382][  T101]  ? kthread_create_on_node+0xf0/0xf0
+[   27.373396][  T101]  ret_from_fork+0x24/0x30
+[   27.381295][  T101] Kernel Offset: disabled
+[   27.414812][  T101] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/412 b/pkg/report/testdata/linux/report/412
new file mode 100644
index 0000000..326028b
--- /dev/null
+++ b/pkg/report/testdata/linux/report/412
@@ -0,0 +1,110 @@
+TITLE: WARNING in default_device_exit_batch
+
+[  794.553848] WARNING: CPU: 0 PID: 21 at net/core/dev.c:8022 rollback_registered_many+0xeca/0x1250
+[  794.562851] Kernel panic - not syncing: panic_on_warn set ...
+[  794.568712] CPU: 0 PID: 21 Comm: kworker/u4:1 Not tainted 4.20.0-rc2+ #116
+[  794.575698] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[  794.585053] Workqueue: netns cleanup_net
+[  794.589098] Call Trace:
+[  794.591669]  dump_stack+0x244/0x39d
+[  794.595288]  ? dump_stack_print_info.cold.1+0x20/0x20
+[  794.600467]  panic+0x2ad/0x55c
+[  794.603639]  ? add_taint.cold.5+0x16/0x16
+[  794.607782]  ? __warn.cold.8+0x5/0x45
+[  794.611559]  ? __warn+0xe8/0x1d0
+[  794.614920]  ? rollback_registered_many+0xeca/0x1250
+[  794.620000]  __warn.cold.8+0x20/0x45
+[  794.623692]  ? rcu_softirq_qs+0x20/0x20
+[  794.627645]  ? rollback_registered_many+0xeca/0x1250
+[  794.632730]  report_bug+0x254/0x2d0
+[  794.636443]  do_error_trap+0x11b/0x200
+[  794.640313]  do_invalid_op+0x36/0x40
+[  794.644013]  ? rollback_registered_many+0xeca/0x1250
+[  794.649107]  invalid_op+0x14/0x20
+[  794.652539] RIP: 0010:rollback_registered_many+0xeca/0x1250
+[  794.658228] Code: 57 19 00 00 48 c7 c6 e0 dd bc 88 48 c7 c7 20 de bc 88 c6 05 98 4d e2 03 01 e8 42 7f 18 fb 0f 0b e9 a6 f9 ff ff e8 c6 1b 4f fb <0f> 0b e9 7b f9 ff ff e8 ba 1b 4f fb 0f 0b e9 ea f9 ff ff e8 ae 1b
+[  794.677104] RSP: 0018:ffff8881d9467058 EFLAGS: 00010293
+[  794.682443] RAX: ffff8881d945a580 RBX: ffff8881bef64940 RCX: ffffffff86306593
+[  794.689692] RDX: 0000000000000000 RSI: ffffffff86306c1a RDI: 0000000000000001
+[  794.696940] RBP: ffff8881d94672a0 R08: ffff8881d945a580 R09: fffffbfff13e1a38
+[  794.704187] R10: fffffbfff13e1a38 R11: ffffffff89f0d1c7 R12: dffffc0000000000
+[  794.711434] R13: 0000000000000001 R14: ffffffff8494d7c0 R15: ffff8881d9467138
+[  794.718687]  ? bond_do_ioctl+0xae0/0xae0
+[  794.722729]  ? rollback_registered_many+0x843/0x1250
+[  794.727835]  ? rollback_registered_many+0xeca/0x1250
+[  794.733056]  ? rollback_registered_many+0xeca/0x1250
+[  794.738156]  ? generic_xdp_install+0x590/0x590
+[  794.742750]  ? __sanitizer_cov_trace_const_cmp4+0x16/0x20
+[  794.748276]  ? check_preemption_disabled+0x48/0x280
+[  794.753274]  ? __lock_is_held+0xb5/0x140
+[  794.757326]  ? __sanitizer_cov_trace_const_cmp8+0x18/0x20
+[  794.762845]  ? rtnl_is_locked+0xb5/0xf0
+[  794.766794]  ? rtnl_trylock+0x20/0x20
+[  794.770574]  ? __sanitizer_cov_trace_const_cmp8+0x18/0x20
+[  794.776090]  ? rtnl_is_locked+0xb5/0xf0
+[  794.780064]  ? rtnl_trylock+0x20/0x20
+[  794.783839]  ? __sanitizer_cov_trace_const_cmp1+0x1a/0x20
+[  794.789355]  ? unregister_netdevice_queue+0x2c0/0x5e0
+[  794.794540]  unregister_netdevice_many+0xfa/0x4c0
+[  794.799362]  ? unregister_netdev+0x30/0x30
+[  794.803578]  ? sysfs_remove_group+0xf6/0x1b0
+[  794.807969]  ? br_dev_delete+0x139/0x190
+[  794.812137]  default_device_exit_batch+0x43a/0x540
+[  794.817054]  ? unregister_netdevice_many+0x4c0/0x4c0
+[  794.822140]  ? default_device_exit+0x224/0x2c0
+[  794.826792]  ? __init_waitqueue_head+0x150/0x150
+[  794.831528]  ? rtnl_unlock+0xe/0x10
+[  794.835140]  ? unregister_netdevice_many+0x4c0/0x4c0
+[  794.840217]  ? dev_change_net_namespace+0xe50/0xe50
+[  794.845208]  ops_exit_list.isra.5+0x105/0x160
+[  794.849684]  cleanup_net+0x555/0xb10
+[  794.853375]  ? peernet2id_alloc+0x3e0/0x3e0
+[  794.857672]  ? find_held_lock+0x36/0x1c0
+[  794.861714]  ? zap_class+0x640/0x640
+[  794.865425]  ? __sanitizer_cov_trace_const_cmp4+0x16/0x20
+[  794.871247]  ? check_preemption_disabled+0x48/0x280
+[  794.876250]  ? __lock_is_held+0xb5/0x140
+[  794.880296]  process_one_work+0xc90/0x1c40
+[  794.884521]  ? mark_held_locks+0x130/0x130
+[  794.888859]  ? pwq_dec_nr_in_flight+0x4a0/0x4a0
+[  794.893513]  ? __switch_to_asm+0x40/0x70
+[  794.897571]  ? __switch_to_asm+0x34/0x70
+[  794.901607]  ? __switch_to_asm+0x34/0x70
+[  794.905645]  ? __switch_to_asm+0x40/0x70
+[  794.909683]  ? __switch_to_asm+0x34/0x70
+[  794.913720]  ? __switch_to_asm+0x40/0x70
+[  794.917771]  ? __switch_to_asm+0x34/0x70
+[  794.921824]  ? __switch_to_asm+0x40/0x70
+[  794.925863]  ? __schedule+0x8d7/0x21d0
+[  794.929728]  ? lockdep_hardirqs_on+0x3bb/0x5b0
+[  794.934292]  ? trace_hardirqs_on_caller+0x310/0x310
+[  794.939285]  ? zap_class+0x640/0x640
+[  794.943014]  ? lockdep_hardirqs_on+0x3bb/0x5b0
+[  794.947588]  ? lock_acquire+0x1ed/0x520
+[  794.951537]  ? worker_thread+0x3e0/0x1390
+[  794.955672]  ? kasan_check_read+0x11/0x20
+[  794.959797]  ? do_raw_spin_lock+0x14f/0x350
+[  794.964098]  ? kasan_check_read+0x11/0x20
+[  794.968223]  ? rwlock_bug.part.2+0x90/0x90
+[  794.972435]  ? trace_hardirqs_on+0x310/0x310
+[  794.976828]  worker_thread+0x17f/0x1390
+[  794.980779]  ? __switch_to_asm+0x34/0x70
+[  794.984825]  ? process_one_work+0x1c40/0x1c40
+[  794.989310]  ? __sched_text_start+0x8/0x8
+[  794.993446]  ? __kthread_parkme+0xce/0x1a0
+[  794.997655]  ? _raw_spin_unlock_irqrestore+0x82/0xd0
+[  795.002736]  ? _raw_spin_unlock_irqrestore+0x82/0xd0
+[  795.007814]  ? lockdep_hardirqs_on+0x3bb/0x5b0
+[  795.012390]  ? trace_hardirqs_on+0xbd/0x310
+[  795.016686]  ? kasan_check_read+0x11/0x20
+[  795.020810]  ? __kthread_parkme+0xce/0x1a0
+[  795.025036]  ? trace_hardirqs_off_caller+0x310/0x310
+[  795.030138]  ? _raw_spin_unlock_irqrestore+0x6d/0xd0
+[  795.035233]  ? __sanitizer_cov_trace_const_cmp8+0x18/0x20
+[  795.040742]  ? __kthread_parkme+0xfb/0x1a0
+[  795.044955]  ? process_one_work+0x1c40/0x1c40
+[  795.049426]  kthread+0x35a/0x440
+[  795.052772]  ? kthread_stop+0x900/0x900
+[  795.056725]  ret_from_fork+0x3a/0x50
+[  795.061996] Kernel Offset: disabled
+[  795.065886] Rebooting in 86400 seconds..
diff --git a/pkg/report/testdata/linux/report/413 b/pkg/report/testdata/linux/report/413
new file mode 100644
index 0000000..84972a0
--- /dev/null
+++ b/pkg/report/testdata/linux/report/413
@@ -0,0 +1,113 @@
+TITLE: KASAN: use-after-free Read in iowarrior_disconnect
+
+[  272.327487][   T12] ==================================================================
+[  272.335789][   T12] BUG: KASAN: use-after-free in __list_del_entry_valid+0x15e/0x170
+[  272.336706][ T2803] hub 4-1:0.0: USB hub found
+[  272.343673][   T12] Read of size 8 at addr ffff8881d1b97948 by task kworker/0:1/12
+[  272.343694][   T12]
+[  272.343710][   T12] CPU: 0 PID: 12 Comm: kworker/0:1 Not tainted 5.3.0-rc5+ #28
+[  272.343718][   T12] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[  272.343738][   T12] Workqueue: usb_hub_wq hub_event
+[  272.380797][   T12] Call Trace:
+[  272.384096][   T12]  dump_stack+0xca/0x13e
+[  272.388338][   T12]  ? __list_del_entry_valid+0x15e/0x170
+[  272.393865][   T12]  ? __list_del_entry_valid+0x15e/0x170
+[  272.399386][   T12]  print_address_description+0x6a/0x32c
+[  272.404915][   T12]  ? __list_del_entry_valid+0x15e/0x170
+[  272.410445][   T12]  ? __list_del_entry_valid+0x15e/0x170
+[  272.416029][   T12]  __kasan_report.cold+0x1a/0x33
+[  272.421045][   T12]  ? do_raw_spin_lock+0x70/0x280
+[  272.425962][   T12]  ? __list_del_entry_valid+0x15e/0x170
+[  272.431487][   T12]  kasan_report+0xe/0x12
+[  272.435712][   T12]  __list_del_entry_valid+0x15e/0x170
+[  272.441085][   T12]  mutex_remove_waiter+0x200/0x470
+[  272.446177][   T12]  __mutex_lock+0x4e0/0x1360
+[  272.450760][   T12]  ? iowarrior_disconnect+0xf0/0x2c0
+[  272.456024][   T12]  ? mutex_trylock+0x2c0/0x2c0
+[  272.460761][   T12]  ? __mutex_unlock_slowpath+0xea/0x670
+[  272.466280][   T12]  ? iowarrior_disconnect+0xf0/0x2c0
+[  272.471542][   T12]  iowarrior_disconnect+0xf0/0x2c0
+[  272.476643][   T12]  usb_unbind_interface+0x1bd/0x8a0
+[  272.479187][ T2760] usb 6-1: USB disconnect, device number 120
+[  272.481834][   T12]  ? usb_autoresume_device+0x60/0x60
+[  272.481851][   T12]  device_release_driver_internal+0x42f/0x500
+[  272.481864][   T12]  bus_remove_device+0x2dc/0x4a0
+[  272.481881][   T12]  device_del+0x420/0xb10
+[  272.508329][   T12]  ? __device_links_no_driver+0x240/0x240
+[  272.514037][   T12]  ? usb_remove_ep_devs+0x3e/0x80
+[  272.519065][   T12]  ? remove_intf_ep_devs+0x13f/0x1d0
+[  272.524348][   T12]  usb_disable_device+0x211/0x690
+[  272.529363][   T12]  usb_disconnect+0x284/0x8d0
+[  272.534019][   T12]  hub_event+0x1454/0x3640
+[  272.538415][   T12]  ? find_held_lock+0x2d/0x110
+[  272.543164][   T12]  ? mark_held_locks+0xe0/0xe0
+[  272.547913][   T12]  ? hub_port_debounce+0x260/0x260
+[  272.553031][   T12]  process_one_work+0x92b/0x1530
+[  272.557971][   T12]  ? pwq_dec_nr_in_flight+0x310/0x310
+[  272.563344][   T12]  ? do_raw_spin_lock+0x11a/0x280
+[  272.568369][   T12]  worker_thread+0x96/0xe20
+[  272.572871][   T12]  ? process_one_work+0x1530/0x1530
+[  272.578059][   T12]  kthread+0x318/0x420
+[  272.582117][   T12]  ? kthread_create_on_node+0xf0/0xf0
+[  272.587470][   T12]  ret_from_fork+0x24/0x30
+[  272.591866][   T12]
+[  272.594181][   T12] Allocated by task 102:
+[  272.598410][   T12]  save_stack+0x1b/0x80
+[  272.602538][   T12]  __kasan_kmalloc.constprop.0+0xbf/0xd0
+[  272.608146][   T12]  iowarrior_probe+0x7a/0x10b2
+[  272.612890][   T12]  usb_probe_interface+0x305/0x7a0
+[  272.617996][   T12]  really_probe+0x281/0x6d0
+[  272.622493][   T12]  driver_probe_device+0x101/0x1b0
+[  272.627609][   T12]  __device_attach_driver+0x1c2/0x220
+[  272.632973][   T12]  bus_for_each_drv+0x162/0x1e0
+[  272.637819][   T12]  __device_attach+0x217/0x360
+[  272.642579][   T12]  bus_probe_device+0x1e4/0x290
+[  272.647430][   T12]  device_add+0xae6/0x16f0
+[  272.651852][   T12]  usb_set_configuration+0xdf6/0x1670
+[  272.657222][   T12]  generic_probe+0x9d/0xd5
+[  272.661635][   T12]  usb_probe_device+0x99/0x100
+[  272.666396][   T12]  really_probe+0x281/0x6d0
+[  272.670894][   T12]  driver_probe_device+0x101/0x1b0
+[  272.676004][   T12]  __device_attach_driver+0x1c2/0x220
+[  272.681366][   T12]  bus_for_each_drv+0x162/0x1e0
+[  272.686208][   T12]  __device_attach+0x217/0x360
+[  272.690960][   T12]  bus_probe_device+0x1e4/0x290
+[  272.695804][   T12]  device_add+0xae6/0x16f0
+[  272.700217][   T12]  usb_new_device.cold+0x6a4/0xe79
+[  272.705321][   T12]  hub_event+0x1b5c/0x3640
+[  272.709728][   T12]  process_one_work+0x92b/0x1530
+[  272.714658][   T12]  worker_thread+0x96/0xe20
+[  272.719154][   T12]  kthread+0x318/0x420
+[  272.723218][   T12]  ret_from_fork+0x24/0x30
+[  272.727616][   T12]
+[  272.729936][   T12] Freed by task 5858:
+[  272.733915][   T12]  save_stack+0x1b/0x80
+[  272.738067][   T12]  __kasan_slab_free+0x130/0x180
+[  272.742997][   T12]  kfree+0xe4/0x2f0
+[  272.746804][   T12]  iowarrior_release+0x187/0x280
+[  272.751735][   T12]  __fput+0x2d7/0x840
+[  272.755711][   T12]  task_work_run+0x13f/0x1c0
+[  272.760297][   T12]  exit_to_usermode_loop+0x1d2/0x200
+[  272.765575][   T12]  do_syscall_64+0x45f/0x580
+[  272.770163][   T12]  entry_SYSCALL_64_after_hwframe+0x49/0xbe
+[  272.776040][   T12]
+[  272.778367][   T12] The buggy address belongs to the object at ffff8881d1b97900
+[  272.778367][   T12]  which belongs to the cache kmalloc-512 of size 512
+[  272.792413][   T12] The buggy address is located 72 bytes inside of
+[  272.792413][   T12]  512-byte region [ffff8881d1b97900, ffff8881d1b97b00)
+[  272.805591][   T12] The buggy address belongs to the page:
+[  272.811215][   T12] page:ffffea000746e580 refcount:1 mapcount:0 mapping:ffff8881da002500 index:0x0 compound_mapcount: 0
+[  272.822141][   T12] flags: 0x200000000010200(slab|head)
+[  272.827513][   T12] raw: 0200000000010200 ffffea00072f9680 0000000400000004 ffff8881da002500
+[  272.836095][   T12] raw: 0000000000000000 00000000000c000c 00000001ffffffff 0000000000000000
+[  272.844663][   T12] page dumped because: kasan: bad access detected
+[  272.851062][   T12]
+[  272.853381][   T12] Memory state around the buggy address:
+[  272.859008][   T12]  ffff8881d1b97800: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  272.867065][   T12]  ffff8881d1b97880: fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc fc
+[  272.875123][   T12] >ffff8881d1b97900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  272.883175][   T12]                                               ^
+[  272.889587][   T12]  ffff8881d1b97980: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  272.897682][   T12]  ffff8881d1b97a00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[  272.899562][   T83] usb 5-1: USB disconnect, device number 30
+[  272.905743][   T12] ==================================================================
diff --git a/pkg/report/testdata/linux/report/414 b/pkg/report/testdata/linux/report/414
new file mode 100644
index 0000000..87bd868
--- /dev/null
+++ b/pkg/report/testdata/linux/report/414
@@ -0,0 +1,111 @@
+TITLE: KASAN: use-after-free Write in iowarrior_disconnect
+
+[   72.512165][   T17] ==================================================================
+[   72.520532][   T17] BUG: KASAN: use-after-free in usb_kill_urb+0x18f/0x2c0
+[   72.527601][   T17] Write of size 4 at addr ffff8881d586ca14 by task kworker/1:0/17
+[   72.535386][   T17]
+[   72.537703][   T17] CPU: 1 PID: 17 Comm: kworker/1:0 Not tainted 5.3.0-rc5+ #28
+[   72.545140][   T17] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[   72.555187][   T17] Workqueue: usb_hub_wq hub_event
+[   72.560191][   T17] Call Trace:
+[   72.563470][   T17]  dump_stack+0xca/0x13e
+[   72.567758][   T17]  ? usb_kill_urb+0x18f/0x2c0
+[   72.572512][   T17]  ? usb_kill_urb+0x18f/0x2c0
+[   72.577185][   T17]  print_address_description+0x6a/0x32c
+[   72.582980][   T17]  ? usb_kill_urb+0x18f/0x2c0
+[   72.587638][   T17]  ? usb_kill_urb+0x18f/0x2c0
+[   72.592301][   T17]  __kasan_report.cold+0x1a/0x33
+[   72.597239][   T17]  ? mark_held_locks+0x21/0xe0
+[   72.601990][   T17]  ? usb_kill_urb+0x18f/0x2c0
+[   72.606646][   T17]  kasan_report+0xe/0x12
+[   72.610887][   T17]  check_memory_region+0x128/0x190
+[   72.615983][   T17]  usb_kill_urb+0x18f/0x2c0
+[   72.620467][   T17]  ? usb_poison_anchored_urbs+0x150/0x150
+[   72.626178][   T17]  ? __mutex_unlock_slowpath+0x2d6/0x670
+[   72.631802][   T17]  ? wait_for_completion+0x3c0/0x3c0
+[   72.637112][   T17]  ? finish_wait+0x260/0x260
+[   72.641698][   T17]  iowarrior_disconnect+0x176/0x2c0
+[   72.646913][   T17]  usb_unbind_interface+0x1bd/0x8a0
+[   72.652102][   T17]  ? usb_autoresume_device+0x60/0x60
+[   72.657387][   T17]  device_release_driver_internal+0x42f/0x500
+[   72.663467][   T17]  bus_remove_device+0x2dc/0x4a0
+[   72.668431][   T17]  device_del+0x420/0xb10
+[   72.672845][   T17]  ? __device_links_no_driver+0x240/0x240
+[   72.678549][   T17]  ? usb_remove_ep_devs+0x3e/0x80
+[   72.683643][   T17]  ? remove_intf_ep_devs+0x13f/0x1d0
+[   72.688928][   T17]  usb_disable_device+0x211/0x690
+[   72.693942][   T17]  usb_disconnect+0x284/0x8d0
+[   72.698616][   T17]  hub_event+0x1454/0x3640
+[   72.703025][   T17]  ? find_held_lock+0x2d/0x110
+[   72.707860][   T17]  ? mark_held_locks+0xe0/0xe0
+[   72.712603][   T17]  ? hub_port_debounce+0x260/0x260
+[   72.717694][   T17]  process_one_work+0x92b/0x1530
+[   72.722622][   T17]  ? pwq_dec_nr_in_flight+0x310/0x310
+[   72.728008][   T17]  ? do_raw_spin_lock+0x11a/0x280
+[   72.733032][   T17]  worker_thread+0x96/0xe20
+[   72.737535][   T17]  ? process_one_work+0x1530/0x1530
+[   72.742723][   T17]  kthread+0x318/0x420
+[   72.746810][   T17]  ? kthread_create_on_node+0xf0/0xf0
+[   72.752171][   T17]  ret_from_fork+0x24/0x30
+[   72.756563][   T17]
+[   72.758870][   T17] Allocated by task 2767:
+[   72.763177][   T17]  save_stack+0x1b/0x80
+[   72.767331][   T17]  __kasan_kmalloc.constprop.0+0xbf/0xd0
+[   72.772977][   T17]  usb_alloc_urb+0x65/0xb0
+[   72.777397][   T17]  iowarrior_probe+0x4b2/0x10b2
+[   72.782256][   T17]  usb_probe_interface+0x305/0x7a0
+[   72.787367][   T17]  really_probe+0x281/0x6d0
+[   72.791854][   T17]  driver_probe_device+0x101/0x1b0
+[   72.797034][   T17]  __device_attach_driver+0x1c2/0x220
+[   72.802403][   T17]  bus_for_each_drv+0x162/0x1e0
+[   72.807251][   T17]  __device_attach+0x217/0x360
+[   72.812004][   T17]  bus_probe_device+0x1e4/0x290
+[   72.816832][   T17]  device_add+0xae6/0x16f0
+[   72.821232][   T17]  usb_set_configuration+0xdf6/0x1670
+[   72.826587][   T17]  generic_probe+0x9d/0xd5
+[   72.830981][   T17]  usb_probe_device+0x99/0x100
+[   72.835726][   T17]  really_probe+0x281/0x6d0
+[   72.840470][   T17]  driver_probe_device+0x101/0x1b0
+[   72.845562][   T17]  __device_attach_driver+0x1c2/0x220
+[   72.850914][   T17]  bus_for_each_drv+0x162/0x1e0
+[   72.855746][   T17]  __device_attach+0x217/0x360
+[   72.860613][   T17]  bus_probe_device+0x1e4/0x290
+[   72.865443][   T17]  device_add+0xae6/0x16f0
+[   72.869843][   T17]  usb_new_device.cold+0x6a4/0xe79
+[   72.874936][   T17]  hub_event+0x1b5c/0x3640
+[   72.879365][   T17]  process_one_work+0x92b/0x1530
+[   72.884282][   T17]  worker_thread+0x96/0xe20
+[   72.888780][   T17]  kthread+0x318/0x420
+[   72.892827][   T17]  ret_from_fork+0x24/0x30
+[   72.897220][   T17]
+[   72.899527][   T17] Freed by task 0:
+[   72.903585][   T17]  save_stack+0x1b/0x80
+[   72.907811][   T17]  __kasan_slab_free+0x130/0x180
+[   72.912736][   T17]  kfree+0xe4/0x2f0
+[   72.916530][   T17]  usb_free_urb.part.0+0x7a/0xc0
+[   72.921444][   T17]  usb_free_urb+0x1b/0x30
+[   72.925752][   T17]  usb_hcd_giveback_urb+0x368/0x420
+[   72.930927][   T17]  dummy_timer+0x120f/0x2fa2
+[   72.935496][   T17]  call_timer_fn+0x179/0x650
+[   72.940065][   T17]  run_timer_softirq+0x5cc/0x14b0
+[   72.945073][   T17]  __do_softirq+0x221/0x912
+[   72.949548][   T17]
+[   72.951876][   T17] The buggy address belongs to the object at ffff8881d586ca00
+[   72.951876][   T17]  which belongs to the cache kmalloc-192 of size 192
+[   72.965914][   T17] The buggy address is located 20 bytes inside of
+[   72.965914][   T17]  192-byte region [ffff8881d586ca00, ffff8881d586cac0)
+[   72.979174][   T17] The buggy address belongs to the page:
+[   72.984790][   T17] page:ffffea0007561b00 refcount:1 mapcount:0 mapping:ffff8881da002a00 index:0x0
+[   72.993874][   T17] flags: 0x200000000000200(slab)
+[   72.998796][   T17] raw: 0200000000000200 dead000000000100 dead000000000122 ffff8881da002a00
+[   73.007359][   T17] raw: 0000000000000000 0000000000100010 00000001ffffffff 0000000000000000
+[   73.015922][   T17] page dumped because: kasan: bad access detected
+[   73.022310][   T17]
+[   73.024614][   T17] Memory state around the buggy address:
+[   73.030227][   T17]  ffff8881d586c900: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[   73.038271][   T17]  ffff8881d586c980: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
+[   73.046312][   T17] >ffff8881d586ca00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[   73.054353][   T17]                          ^
+[   73.058919][   T17]  ffff8881d586ca80: fb fb fb fb fb fb fb fb fc fc fc fc fc fc fc fc
+[   73.067044][   T17]  ffff8881d586cb00: fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb fb
+[   73.075087][   T17] ==================================================================
diff --git a/pkg/report/testdata/linux/report/415 b/pkg/report/testdata/linux/report/415
new file mode 100644
index 0000000..5419527
--- /dev/null
+++ b/pkg/report/testdata/linux/report/415
@@ -0,0 +1,54 @@
+TITLE: WARNING: ODEBUG bug in netdev_freemem
+
+[ 3008.116296][T24159] ------------[ cut here ]------------
+[ 3008.121093][ T1807] 8021q: adding VLAN 0 to HW filter on device batadv0
+[ 3008.121995][T24159] ODEBUG: free active (active state 0) object type: timer_list hint: delayed_work_timer_fn+0x0/0x90
+[ 3008.129496][ T1807] kobject: 'vlan0' (00000000b294a58f): kobject_add_internal: parent: 'mesh', set: '<NULL>'
+[ 3008.140532][T24159] WARNING: CPU: 0 PID: 24159 at lib/debugobjects.c:484 debug_check_no_obj_freed+0x464/0x5b0
+[ 3008.140539][T24159] Kernel panic - not syncing: panic_on_warn set ...
+[ 3008.140549][T24159] CPU: 0 PID: 24159 Comm: kworker/u4:4 Not tainted 5.3.0-rc7 #0
+[ 3008.140555][T24159] Hardware name: Google Google Compute Engine/Google Compute Engine, BIOS Google 01/01/2011
+[ 3008.140587][T24159] Workqueue: netns cleanup_net
+[ 3008.140593][T24159] Call Trace:
+[ 3008.140607][T24159]  dump_stack+0x1d8/0x2f8
+[ 3008.140640][T24159]  panic+0x25c/0x799
+[ 3008.140656][T24159]  __warn+0x22f/0x230
+[ 3008.140673][T24159]  report_bug+0x190/0x290
+[ 3008.140728][T24159]  do_error_trap+0xd7/0x440
+[ 3008.140739][T24159]  do_invalid_op+0x36/0x40
+[ 3008.140756][T24159]  invalid_op+0x23/0x30
+[ 3008.140765][T24159] RIP: 0010:debug_check_no_obj_freed+0x464/0x5b0
+[ 3008.140774][T24159] Code: 08 48 89 df e8 7d 96 58 fe 4c 8b 03 48 c7 c7 9e 5d 45 88 48 c7 c6 e4 7f 43 88 4c 89 e2 44 89 f9 4d 89 e9 31 c0 e8 6c 7d f2 fd <0f> 0b 4c 8b 6d a8 ff 05 44 34 6a 05 49 83 c5 30 4c 89 e8 48 c1 e8
+[ 3008.140779][T24159] RSP: 0018:ffff88808b22f900 EFLAGS: 00010046
+[ 3008.140786][T24159] RAX: 6096dfdc67ea2300 RBX: ffffffff888da040 RCX: ffff8880a0206000
+[ 3008.140791][T24159] RDX: 0000000000000000 RSI: 0000000080000000 RDI: 0000000000000000
+[ 3008.140796][T24159] RBP: ffff88808b22f998 R08: ffffffff815cfa14 R09: ffffed1015d440d2
+[ 3008.140801][T24159] R10: ffffed1015d440d2 R11: 0000000000000000 R12: ffffffff884eece1
+[ 3008.140807][T24159] R13: ffffffff814c7770 R14: dffffc0000000000 R15: 0000000000000000
+[ 3008.140926][T24159]  kfree+0x107/0x200
+[ 3008.140936][T24159]  kvfree+0x47/0x50
+[ 3008.140960][T24159]  netdev_freemem+0x3e/0x60
+[ 3008.140997][T24159]  netdev_release+0x79/0xa0
+[ 3008.173080][ T1812] kobject: 'ip6gretap0' (0000000011a6ccfe): kobject_add_internal: parent: 'net', set: 'devices'
+[ 3008.175953][T24159]  device_release+0x74/0x1a0
+[ 3008.186465][ T1812] kobject: 'ip6gretap0' (0000000011a6ccfe): kobject_uevent_env
+[ 3008.190674][T24159]  kobject_cleanup+0x2f7/0x4c0
+[ 3008.190697][T24159]  kobject_put+0xad/0xe0
+[ 3008.194348][ T1812] kobject: 'ip6gretap0' (0000000011a6ccfe): fill_kobj_path: path = '/devices/virtual/net/ip6gretap0'
+[ 3008.198640][T24159]  netdev_run_todo+0xbff/0xd90
+[ 3008.202707][ T1812] kobject: 'queues' (0000000009d2beab): kobject_add_internal: parent: 'ip6gretap0', set: '<NULL>'
+[ 3008.206803][T24159]  rtnl_unlock+0xe/0x10
+[ 3008.211178][ T1812] kobject: 'queues' (0000000009d2beab): kobject_uevent_env
+[ 3008.216497][T24159]  default_device_exit_batch+0x65e/0x6a0
+[ 3008.220929][ T1812] kobject: 'queues' (0000000009d2beab): kobject_uevent_env: filter function caused the event to drop!
+[ 3008.231253][ T1812] kobject: 'rx-0' (000000002e64dd06): kobject_add_internal: parent: 'queues', set: 'queues'
+[ 3008.242358][ T1812] kobject: 'rx-0' (000000002e64dd06): kobject_uevent_env
+[ 3008.245329][T24159]  cleanup_net+0x70b/0xaa0
+[ 3008.245342][T24159]  process_one_work+0x7ef/0x10e0
+[ 3008.245358][T24159]  worker_thread+0xc01/0x1630
+[ 3008.245473][T24159]  kthread+0x332/0x350
+[ 3008.252375][ T1812] kobject: 'rx-0' (000000002e64dd06): fill_kobj_path: path = '/devices/virtual/net/ip6gretap0/queues/rx-0'
+[ 3008.271382][T24159]  ret_from_fork+0x24/0x30
+[ 3008.272950][T24159] Kernel Offset: disabled
+[ 3008.525434][T24159] Rebooting in 86400 seconds..
+
diff --git a/pkg/report/testdata/openbsd/report/16 b/pkg/report/testdata/openbsd/report/16
new file mode 100644
index 0000000..6303f06
--- /dev/null
+++ b/pkg/report/testdata/openbsd/report/16
@@ -0,0 +1,317 @@
+TITLE: witness: userret: write
+
+witness: userret: returning with the following locks held:
+exclusive rrwlock inode r = 0 (0xfffffd8068b43e68)
+#0  witness_lock+0x52e
+#1  rw_enter+0x46d
+#2  rrw_enter+0x4f
+#3  VOP_LOCK+0x4b
+#4  vn_write+0x169
+#5  dofilewritev+0x1ac
+#6  sys_write+0x83
+#7  syscall+0x552
+#8  Xsyscall+0x128
+panic: witness_warn
+Stopped at      db_enter+0x18:  addq    $0x8,%rsp
+    TID    PID    UID     PRFLAGS     PFLAGS  CPU  COMMAND
+*127727   4787  32767      0x2010  0x4080000    1  syz-executor.1
+ 397608  24914     73    0x100010          0    0  syslogd
+db_enter() at db_enter+0x18
+panic() at panic+0x15c
+witness_warn(2,0,ffffffff82206990) at witness_warn+0x69e
+userret(ffff800020acec78) at userret+0x36a
+syscall(ffff800024f63420) at syscall+0x44a
+Xsyscall(6,5,c,0,3,c0eb2625010) at Xsyscall+0x128
+end of kernel
+end trace frame: 0xc1166dc17a0, count: 9
+https://www.openbsd.org/ddb.html describes the minimum info required in bug
+reports.  Insufficient info makes it difficult to find and fix bugs.
+ddb{1}>
+ddb{1}> set $lines = 0
+ddb{1}> set $maxwidth = 0
+ddb{1}> show panic
+witness_warn
+ddb{1}> trace
+db_enter() at db_enter+0x18
+panic() at panic+0x15c
+witness_warn(2,0,ffffffff82206990) at witness_warn+0x69e
+userret(ffff800020acec78) at userret+0x36a
+syscall(ffff800024f63420) at syscall+0x44a
+Xsyscall(6,5,c,0,3,c0eb2625010) at Xsyscall+0x128
+end of kernel
+end trace frame: 0xc1166dc17a0, count: -6
+ddb{1}> show registers
+rdi                                0
+rsi                          0x3ffff    acpi_pdirpa+0x2be67
+rbp               0xffff800024f63160
+rbx               0xffff800024f63210
+rdx                          0x40000    acpi_pdirpa+0x2be68
+rcx               0xffff800021f52000
+rax               0xffff800000a6ebc0
+r8                0xffffffff81e141c3    kprintf+0x173
+r9                               0x1
+r10                             0x25
+r11               0xb1f19339cedc7a5c
+r12                     0x3000000008
+r13               0xffff800024f63170
+r14                            0x100
+r15                              0x1
+rip               0xffffffff81e136b8    db_enter+0x18
+cs                               0x8
+rflags                         0x246
+rsp               0xffff800024f63150
+ss                              0x10
+db_enter+0x18:  addq    $0x8,%rsp
+ddb{1}> show proc
+PROC (syz-executor.1) pid=127727 stat=onproc
+    flags process=2010<SUGID,SINGLEUNWIND> proc=4080000<SUSPSINGLE,THREAD>
+    pri=32, usrpri=86, nice=20
+    forw=0xffffffffffffffff, list=0xffff800020ace020,0xffff800020acf8e0
+    process=0xffff800020adc000 user=0xffff800024f5e000, vmspace=0xfffffd807f00ca10
+    estcpu=36, cpticks=5, pctcpu=0.0
+    user=0, sys=5, intr=0
+ddb{1}> ps
+   PID     TID   PPID    UID  S       FLAGS  WAIT          COMMAND
+ 50146  384011  93903  32767  2        0x10                syz-executor.0
+ 50146  458774  93903  32767  2   0x4000090                syz-executor.0
+ 50146  443490  93903  32767  3   0x4000010  inode         syz-executor.0
+  4787  150491  90341  32767  4     0x82010                syz-executor.1
+* 4787  127727  90341  32767  7   0x4082010                syz-executor.1
+  4787  259046  90341  32767  2   0x4082010                syz-executor.1
+  4787  221006  90341  32767  3   0x4082010  inode         syz-executor.1
+  4787   70544  90341  32767  3   0x4002010  suspend       syz-executor.1
+ 93903  390199  66612  32767  3        0x90  nanosleep     syz-executor.0
+ 66612  514755  45878      0  3        0x82  wait          syz-executor.0
+ 90341  117146  92790  32767  2       0x490                syz-executor.1
+ 92790  129794  45878      0  3        0x82  wait          syz-executor.1
+ 16665  437832      0      0  3     0x14200  bored         sosplice
+ 45878  439952  24034      0  3        0x82  kqread        syz-fuzzer
+ 45878  302097  24034      0  2   0x4000482                syz-fuzzer
+ 45878  447485  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878  401500  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878  429086  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878  441558  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878   32330  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878  297379  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878  240767  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 45878  291298  24034      0  3   0x4000082  thrsleep      syz-fuzzer
+ 24034  483088  21342      0  3    0x10008a  pause         ksh
+ 21342   45907  10808      0  3        0x92  select        sshd
+ 38957  371602      1      0  3    0x100083  ttyin         getty
+ 10808  298188      1      0  3        0x80  select        sshd
+ 24914  397608   1007     73  7    0x100010                syslogd
+  1007  452199      1      0  3    0x100082  netio         syslogd
+ 24790  439683      1     77  3    0x100090  poll          dhclient
+ 54973  346754      1      0  3        0x80  poll          dhclient
+ 69706  108630      0      0  2     0x14200                zerothread
+ 64136  271591      0      0  3     0x14200  aiodoned      aiodoned
+  2028  296064      0      0  3     0x14200  syncer        update
+ 86492  223421      0      0  3     0x14200  cleaner       cleaner
+ 35057  440015      0      0  3     0x14200  reaper        reaper
+ 56493  127515      0      0  3     0x14200  pgdaemon      pagedaemon
+ 38968   45139      0      0  3     0x14200  bored         crynlk
+ 79592  227575      0      0  3     0x14200  bored         crypto
+ 32698   41884      0      0  3  0x40014200  acpi0         acpi0
+ 14078  480701      0      0  3  0x40014200                idle1
+ 19658   28196      0      0  3     0x14200  bored         softnet
+ 32857  444808      0      0  3     0x14200  bored         systqmp
+ 45345   69336      0      0  3     0x14200  bored         systq
+ 13516  165843      0      0  3  0x40014200  bored         softclock
+ 85557   97343      0      0  3  0x40014200                idle0
+ 55872  214173      0      0  3     0x14200  bored         smr
+     1  266521      0      0  3        0x82  wait          init
+     0       0     -1      0  3     0x10200  scheduler     swapper
+ddb{1}> show all locks
+Process 50146 (syz-executor.0) thread 0xffff800020ac18c0 (384011)
+exclusive kernel_lock &kernel_lock r = 1 (0xffffffff8265ab40)
+#0  witness_lock+0x52e
+#1  intr_handler+0x5e
+#2  Xintr_ioapic_edge17_untramp+0x19f
+Process 50146 (syz-executor.0) thread 0xffff800020acea00 (443490)
+exclusive rrwlock inode r = 0 (0xfffffd807ec55b38)
+#0  witness_lock+0x52e
+#1  rw_enter+0x46d
+#2  rrw_enter+0x4f
+#3  VOP_LOCK+0x4b
+#4  vn_lock+0x6e
+#5  vget+0x1c3
+#6  cache_lookup+0x2cf
+#7  ufs_lookup+0x1ad
+#8  VOP_LOOKUP+0x5b
+#9  vfs_lookup+0x7a5
+#10 namei+0x61c
+#11 ptmioctl+0x3af
+#12 VOP_IOCTL+0x88
+#13 vn_ioctl+0xb7
+#14 sys_ioctl+0x5b8
+#15 syscall+0x552
+#16 Xsyscall+0x128
+exclusive rwlock fdlock r = 0 (0xfffffd80686f7bd8)
+#0  witness_lock+0x52e
+#1  ptmioctl+0xe7
+#2  VOP_IOCTL+0x88
+#3  vn_ioctl+0xb7
+#4  sys_ioctl+0x5b8
+#5  syscall+0x552
+#6  Xsyscall+0x128
+Process 4787 (syz-executor.1) thread 0xffff800020acec78 (127727)
+exclusive rrwlock inode r = 0 (0xfffffd8068b43e68)
+#0  witness_lock+0x52e
+#1  rw_enter+0x46d
+#2  rrw_enter+0x4f
+#3  VOP_LOCK+0x4b
+#4  vn_write+0x169
+#5  dofilewritev+0x1ac
+#6  sys_write+0x83
+#7  syscall+0x552
+#8  Xsyscall+0x128
+Process 24914 (syslogd) thread 0xffff800020ac0ee0 (397608)
+exclusive rrwlock inode r = 0 (0xfffffd806eb40098)
+#0  witness_lock+0x52e
+#1  rw_enter+0x46d
+#2  rrw_enter+0x4f
+#3  VOP_LOCK+0x4b
+#4  vn_lock+0x6e
+#5  sys_fsync+0x114
+#6  syscall+0x552
+#7  Xsyscall+0x128
+ddb{1}> show malloc
+           Type InUse  MemUse  HighUse   Limit  Requests Type Lim Kern Lim
+         devbuf  9462   6321K    6321K  78643K     11404        0        0
+            pcb    13      8K       8K  78643K        13        0        0
+         rtable   105      3K       3K  78643K      7900        0        0
+         ifaddr    36     14K      15K  78643K      1082        0        0
+       counters    39     33K      33K  78643K        39        0        0
+       ioctlops     0      0K       2K  78643K       436        0        0
+            iov     0      0K      36K  78643K       770        0        0
+          mount     1      1K       1K  78643K         1        0        0
+         vnodes  1215     76K      76K  78643K      5637        0        0
+      UFS quota     1     32K      32K  78643K         1        0        0
+      UFS mount     5     36K      36K  78643K         5        0        0
+            shm     2      1K       5K  78643K       102        0        0
+         VM map     2      1K       1K  78643K         2        0        0
+            sem    12      0K       0K  78643K       975        0        0
+        dirhash    12      2K       2K  78643K        12        0        0
+           ACPI  1808    196K     290K  78643K     12765        0        0
+      file desc     8     25K      33K  78643K      9799        0        0
+          sigio     0      0K       0K  78643K       119        0        0
+           proc    41     38K      70K  78643K      8124        0        0
+        subproc    34      2K       2K  78643K      2941        0        0
+    NFS srvsock     1      0K       0K  78643K         1        0        0
+     NFS daemon     1     16K      16K  78643K         1        0        0
+    ip_moptions     0      0K       0K  78643K      1182        0        0
+       in_multi    33      2K       2K  78643K      2199        0        0
+    ether_multi     1      0K       0K  78643K        52        0        0
+    ISOFS mount     1     32K      32K  78643K         1        0        0
+  MSDOSFS mount     1     16K      16K  78643K         1        0        0
+           ttys    60    265K     265K  78643K        60        0        0
+           exec     0      0K       1K  78643K      2998        0        0
+        pagedep     1      8K       8K  78643K         1        0        0
+       inodedep     1     32K      32K  78643K         1        0        0
+         newblk     1      0K       0K  78643K         1        0        0
+        VM swap     7     26K      26K  78643K         7        0        0
+       UVM amap   112     22K      32K  78643K     33952        0        0
+       UVM aobj   130      4K       4K  78643K       151        0        0
+        memdesc     1      4K       4K  78643K         1        0        0
+    crypto data     1      1K       1K  78643K         1        0        0
+    ip6_options     0      0K       0K  78643K       509        0        0
+            NDP     5      0K       0K  78643K       522        0        0
+           temp   121   3546K    3638K  78643K     43256        0        0
+         kqueue     0      0K       0K  78643K       132        0        0
+      SYN cache     2     16K      16K  78643K         2        0        0
+ddb{1}> show all pools
+Name      Size Requests Fail Releases Pgreq Pgrel Npage Hiwat Minpg Maxpg Idle
+arp         64      351    0      345     1     0     1     1     0     8    0
+plcache    128       20    0        0     1     0     1     1     0     8    0
+rtpcb       80      819    0      817     1     0     1     1     0     8    0
+rtentry    112     1929    0     1885     2     0     2     2     0     8    0
+unpcb      120     3870    0     3860     1     0     1     1     0     8    0
+syncache   264        4    0        4     1     1     0     1     0     8    0
+tcpqe       32     4428    0     4428     2     2     0     2     0     8    0
+tcpcb      544     2053    0     2049     1     0     1     1     0     8    0
+ipq         40       11    0       11     7     7     0     1     0     8    0
+ipqe        40       31    0       31     7     7     0     1     0     8    0
+inpcb      280     5055    0     5046    13    12     1     2     0     8    0
+nd6         48      519    0      513     1     0     1     1     0     8    0
+art_heap8  4096       1    0        0     1     0     1     1     0     8    0
+art_heap4  256     7883    0     7688    25    12    13    13     0     8    0
+art_table   32     7884    0     7688     2     0     2     2     0     8    0
+art_node    16     1928    0     1888     1     0     1     1     0     8    0
+sysvmsgpl   40       26    0       18     2     1     1     1     0     8    0
+semapl     112      973    0      963     1     0     1     1     0     8    0
+shmpl      112      149    0       21     5     1     4     4     0     8    0
+dirhash    1024      17    0        0     3     0     3     3     0     8    0
+dino1pl    128    11566    0    10119    48     1    47    47     0     8    0
+ffsino     272    11566    0    10119    97     0    97    97     0     8    0
+nchpl      144    23182    0    21554    61     0    61    61     0     8    0
+uvmvnodes   72     5926    0        0   108     0   108   108     0     8    0
+vnodes     200     5926    0        0   312     0   312   312     0     8    0
+namei      1024   97652    0    97651     2     1     1     1     0     8    0
+percpumem   16       30    0        0     1     0     1     1     0     8    0
+scxspl     192    68137    0    68137    35    34     1     7     0     8    1
+plimitpl   152     1633    0     1624     1     0     1     1     0     8    0
+sigapl     432     9457    0     9441    10     8     2     3     0     8    0
+futexpl     56    84996    0    84996     1     0     1     1     0     8    1
+knotepl    112     5413    0     5394     1     0     1     1     0     8    0
+kqueuepl   104     2347    0     2345     1     0     1     1     0     8    0
+pipepl     112     6084    0     6065     9     8     1     2     0     8    0
+fdescpl    488     9458    0     9441     3     0     3     3     0     8    0
+filepl     152    57889    0    57777    33    28     5     7     0     8    0
+lockfpl    104     1953    0     1953    24    23     1     1     0     8    1
+lockfspl    48      620    0      620    24    23     1     1     0     8    1
+sessionpl  112      188    0      178     1     0     1     1     0     8    0
+pgrppl      48      290    0      280     1     0     1     1     0     8    0
+ucredpl     96    16616    0    16607     1     0     1     1     0     8    0
+zombiepl   144     9441    0     9441     2     1     1     1     0     8    1
+processpl  896     9474    0     9441     4     0     4     4     0     8    0
+procpl     632    25806    0    25758    26    21     5     5     0     8    1
+srpgc       64      342    0      342    31    31     0     1     0     8    0
+sosppl     128      186    0      186    43    42     1     1     0     8    1
+sockpl     384     9910    0     9891    20    17     3     4     0     8    1
+mcl64k     65536     26    0        0     4     1     3     3     0     8    0
+mcl16k     16384     16    0        0     2     0     2     2     0     8    0
+mcl12k     12288     49    0        0     2     0     2     2     0     8    0
+mcl9k      9216      33    0        0     3     1     2     2     0     8    0
+mcl8k      8192      37    0        0     5     2     3     3     0     8    0
+mcl4k      4096      18    0        0     3     0     3     3     0     8    0
+mcl2k2     2112       7    0        0     1     0     1     1     0     8    0
+mcl2k      2048     250    0        0    27    12    15    27     0     8    0
+mtagpl      80        1    0        0     1     0     1     1     0     8    0
+mbufpl     256      819    0        0    16     2    14    16     0     8    0
+bufpl      256    24884    0    17870   439     0   439   439     0     8    0
+anonpl      16  1306709    0  1299708   202   158    44    48     0   124    1
+amapchunkpl 152   79740    0    79646   146   137     9    18     0   158    5
+amappl16   192    58133    0    57737   325   296    29    34     0     8    8
+amappl15   184     1571    0     1571    17    17     0     1     0     8    0
+amappl14   176     2417    0     2413     1     0     1     1     0     8    0
+amappl13   168     2045    0     2042    18    17     1     1     0     8    0
+amappl12   160      652    0      650     6     5     1     1     0     8    0
+amappl11   152     1383    0     1366     1     0     1     1     0     8    0
+amappl10   144     1106    0     1105     1     0     1     1     0     8    0
+amappl9    136     3928    0     3925     1     0     1     1     0     8    0
+amappl8    128     3117    0     3075     3     1     2     2     0     8    0
+amappl7    120     1431    0     1421     1     0     1     1     0     8    0
+amappl6    112      969    0      958     1     0     1     1     0     8    0
+amappl5    104     1951    0     1938     1     0     1     1     0     8    0
+amappl4     96     9732    0     9701     1     0     1     1     0     8    0
+amappl3     88     2597    0     2587     1     0     1     1     0     8    0
+amappl2     80    62851    0    62775     3     1     2     3     0     8    0
+amappl1     72   262376    0   261899    23    13    10    19     0     8    0
+amappl      80    28900    0    28860     1     0     1     1     0    84    0
+dma4096    4096       1    0        1     1     1     0     1     0     8    0
+dma256     256        6    0        6     1     1     0     1     0     8    0
+dma64       64      259    0      259     1     1     0     1     0     8    0
+dma32       32        7    0        7     1     1     0     1     0     8    0
+dma16       16       17    0       17     1     1     0     1     0     8    0
+aobjpl      64      150    0       21     3     0     3     3     0     8    0
+uaddrrnd    24     9458    0     9441     1     0     1     1     0     8    0
+uaddrbest   32        2    0        0     1     0     1     1     0     8    0
+uaddr       24     9458    0     9441     1     0     1     1     0     8    0
+vmmpekpl   168    80680    0    80647     2     0     2     2     0     8    0
+vmmpepl    168  1232948    0  1231203   332   246    86    95     0   357   10
+vmsppl     368     9457    0     9441     2     0     2     2     0     8    0
+pdppl      4096   18923    0    18882     6     0     6     6     0     8    0
+pvpl        32  3134188    0  3123771   567   449   118   131     0   265   18
+pmappl     232     9457    0     9441    18    17     1     2     0     8    0
+extentpl    40       41    0       26     1     0     1     1     0     8    0
+phpool     112      635    0       32    18     0    18    18     0     8    0
diff --git a/prog/analysis.go b/prog/analysis.go
index 383ba15..f8330ed 100644
--- a/prog/analysis.go
+++ b/prog/analysis.go
@@ -15,6 +15,7 @@
 type state struct {
 	target    *Target
 	ct        *ChoiceTable
+	corpus    []*Prog
 	files     map[string]bool
 	resources map[string][]*ResultArg
 	strings   map[string]bool
@@ -23,8 +24,8 @@
 }
 
 // analyze analyzes the program p up to but not including call c.
-func analyze(ct *ChoiceTable, p *Prog, c *Call) *state {
-	s := newState(p.Target, ct)
+func analyze(ct *ChoiceTable, corpus []*Prog, p *Prog, c *Call) *state {
+	s := newState(p.Target, ct, corpus)
 	resources := true
 	for _, c1 := range p.Calls {
 		if c1 == c {
@@ -35,10 +36,11 @@
 	return s
 }
 
-func newState(target *Target, ct *ChoiceTable) *state {
+func newState(target *Target, ct *ChoiceTable, corpus []*Prog) *state {
 	s := &state{
 		target:    target,
 		ct:        ct,
+		corpus:    corpus,
 		files:     make(map[string]bool),
 		resources: make(map[string][]*ResultArg),
 		strings:   make(map[string]bool),
diff --git a/prog/any_test.go b/prog/any_test.go
index 19a32d0..4e16225 100644
--- a/prog/any_test.go
+++ b/prog/any_test.go
@@ -20,7 +20,7 @@
 	compl := make(map[string]bool)
 	for _, meta := range target.Syscalls {
 		for i := 0; i < iters; i++ {
-			s := newState(target, nil)
+			s := newState(target, nil, nil)
 			calls := r.generateParticularCall(s, meta)
 			p := &Prog{Target: target, Calls: calls}
 			for _, arg := range p.complexPtrs() {
diff --git a/prog/decl_test.go b/prog/decl_test.go
index bf6bec4..f999ae5 100644
--- a/prog/decl_test.go
+++ b/prog/decl_test.go
@@ -15,7 +15,7 @@
 	testEachTarget(t, func(t *testing.T, target *Target) {
 		expectFail := false
 		for _, res := range target.Resources {
-			if len(target.calcResourceCtors(res.Kind, true)) == 0 != expectFail {
+			if len(target.calcResourceCtors(res, true)) == 0 != expectFail {
 				t.Errorf("resource %v can't be created", res.Name)
 			}
 		}
diff --git a/prog/encoding.go b/prog/encoding.go
index eb0fb79..904a3e1 100644
--- a/prog/encoding.go
+++ b/prog/encoding.go
@@ -961,7 +961,7 @@
 }
 
 func (p *parser) fixupAutos(prog *Prog) {
-	s := analyze(nil, prog, nil)
+	s := analyze(nil, nil, prog, nil)
 	for _, c := range prog.Calls {
 		p.target.assignSizesArray(c.Args, p.autos)
 		ForeachArg(c, func(arg Arg, _ *ArgCtx) {
diff --git a/prog/export_test.go b/prog/export_test.go
index 1aaea30..9ea3f61 100644
--- a/prog/export_test.go
+++ b/prog/export_test.go
@@ -89,3 +89,14 @@
 		})
 	}
 }
+
+func initBench(b *testing.B) (*Target, func()) {
+	olddebug := debug
+	debug = false
+	target, err := GetTarget("linux", "amd64")
+	if err != nil {
+		b.Fatal(err)
+	}
+	b.ReportAllocs()
+	return target, func() { debug = olddebug }
+}
diff --git a/prog/generation.go b/prog/generation.go
index df31f02..dcb8dc2 100644
--- a/prog/generation.go
+++ b/prog/generation.go
@@ -14,7 +14,7 @@
 		Target: target,
 	}
 	r := newRand(target, rs)
-	s := newState(target, ct)
+	s := newState(target, ct, nil)
 	for len(p.Calls) < ncalls {
 		calls := r.generateCall(s, p)
 		for _, c := range calls {
diff --git a/prog/hints_test.go b/prog/hints_test.go
index 67a2504..78b86e5 100644
--- a/prog/hints_test.go
+++ b/prog/hints_test.go
@@ -480,13 +480,8 @@
 }
 
 func BenchmarkHints(b *testing.B) {
-	olddebug := debug
-	debug = false
-	defer func() { debug = olddebug }()
-	target, err := GetTarget("linux", "amd64")
-	if err != nil {
-		b.Fatal(err)
-	}
+	target, cleanup := initBench(b)
+	defer cleanup()
 	rs := rand.NewSource(0)
 	r := newRand(target, rs)
 	p := target.Generate(rs, 30, nil)
diff --git a/prog/mutation.go b/prog/mutation.go
index dbb6050..1031217 100644
--- a/prog/mutation.go
+++ b/prog/mutation.go
@@ -5,7 +5,9 @@
 
 import (
 	"fmt"
+	"math"
 	"math/rand"
+	"sort"
 	"unsafe"
 )
 
@@ -112,7 +114,7 @@
 	arg.data = mutateData(r, arg.Data(), 0, maxBlobLen)
 	// Update base pointer if size has increased.
 	if baseSize < base.Res.Size() {
-		s := analyze(ctx.ct, p, p.Calls[0])
+		s := analyze(ctx.ct, ctx.corpus, p, p.Calls[0])
 		newArg := r.allocAddr(s, base.Type(), base.Res.Size(), base.Res)
 		*base = *newArg
 	}
@@ -131,8 +133,9 @@
 	if idx < len(p.Calls) {
 		c = p.Calls[idx]
 	}
-	s := analyze(ctx.ct, p, c)
+	s := analyze(ctx.ct, ctx.corpus, p, c)
 	calls := r.generateCall(s, p)
+	// TODO: the program might have more than ncalls
 	p.insertBefore(c, calls)
 	return true
 }
@@ -154,11 +157,12 @@
 	if len(p.Calls) == 0 {
 		return false
 	}
-	c := p.Calls[r.Intn(len(p.Calls))]
-	if len(c.Args) == 0 {
+
+	c, ok := chooseCall(p, r)
+	if !ok {
 		return false
 	}
-	s := analyze(ctx.ct, p, c)
+	s := analyze(ctx.ct, ctx.corpus, p, c)
 	updateSizes := true
 	for stop, ok := false, false; !stop; stop = ok && r.oneOf(3) {
 		ok = true
@@ -167,8 +171,8 @@
 		if len(ma.args) == 0 {
 			return false
 		}
-		idx := r.Intn(len(ma.args))
-		arg, ctx := ma.args[idx], ma.ctxes[idx]
+		chosenIdx := randomChoice(ma.priorities, r)
+		arg, ctx := ma.args[chosenIdx], ma.ctxes[chosenIdx]
 		calls, ok1 := p.Target.mutateArg(r, s, arg, ctx, &updateSizes)
 		if !ok1 {
 			ok = false
@@ -183,6 +187,43 @@
 	return true
 }
 
+// Select a call based on the complexity of the arguments.
+func chooseCall(p *Prog, r *randGen) (*Call, bool) {
+	var callPriorities []float64
+	noArgs := true
+
+	for _, c := range p.Calls {
+		totalPrio := float64(0)
+		ForeachArg(c, func(arg Arg, ctx *ArgCtx) {
+			prio, stopRecursion := arg.Type().getMutationPrio(p.Target, arg, false)
+			totalPrio += prio
+			ctx.Stop = stopRecursion
+		})
+		callPriorities = append(callPriorities, totalPrio)
+		if len(c.Args) > 0 {
+			noArgs = false
+		}
+	}
+
+	// Calls without arguments.
+	if noArgs {
+		return nil, false
+	}
+
+	return p.Calls[randomChoice(callPriorities, r)], true
+}
+
+// Generate a random index from a given 1-D array of priorities.
+func randomChoice(priorities []float64, r *randGen) int {
+	sum := float64(0)
+	probs := make([]float64, len(priorities))
+	for i, prio := range priorities {
+		sum += prio
+		probs[i] = sum
+	}
+	return sort.SearchFloat64s(probs, sum*r.Float64())
+}
+
 func (target *Target) mutateArg(r *randGen, s *state, arg Arg, ctx ArgCtx, updateSizes *bool) ([]*Call, bool) {
 	var baseSize uint64
 	if ctx.Base != nil {
@@ -234,7 +275,11 @@
 }
 
 func (t *FlagsType) mutate(r *randGen, s *state, arg Arg, ctx ArgCtx) (calls []*Call, retry, preserve bool) {
-	return mutateInt(r, s, arg)
+	a := arg.(*ConstArg)
+	for oldVal := a.Val; oldVal == a.Val; {
+		a.Val = r.flags(t.Vals, t.BitMask, a.Val)
+	}
+	return
 }
 
 func (t *LenType) mutate(r *randGen, s *state, arg Arg, ctx ArgCtx) (calls []*Call, retry, preserve bool) {
@@ -395,49 +440,149 @@
 	target        *Target
 	args          []Arg
 	ctxes         []ArgCtx
+	priorities    []float64
 	ignoreSpecial bool
 }
 
+const (
+	maxPriority = float64(10)
+	minPriority = float64(1)
+	dontMutate  = float64(0)
+)
+
 func (ma *mutationArgs) collectArg(arg Arg, ctx *ArgCtx) {
 	ignoreSpecial := ma.ignoreSpecial
 	ma.ignoreSpecial = false
-	switch typ := arg.Type().(type) {
-	case *StructType:
-		if ma.target.SpecialTypes[typ.Name()] == nil || ignoreSpecial {
-			return // For structs only individual fields are updated.
-		}
-		// These special structs are mutated as a whole.
-		ctx.Stop = true
-	case *UnionType:
-		if ma.target.SpecialTypes[typ.Name()] == nil && len(typ.Fields) == 1 || ignoreSpecial {
-			return
-		}
-		ctx.Stop = true
-	case *ArrayType:
-		// Don't mutate fixed-size arrays.
-		if typ.Kind == ArrayRangeLen && typ.RangeBegin == typ.RangeEnd {
-			return
-		}
-	case *CsumType:
-		return // Checksum is updated when the checksummed data changes.
-	case *ConstType:
-		return // Well, this is const.
-	case *BufferType:
-		if typ.Kind == BufferString && len(typ.Values) == 1 {
-			return // string const
-		}
-	case *PtrType:
-		if arg.(*PointerArg).IsSpecial() {
-			// TODO: we ought to mutate this, but we don't have code for this yet.
-			return
-		}
-	}
+
 	typ := arg.Type()
-	if typ == nil || typ.Dir() == DirOut || !typ.Varlen() && typ.Size() == 0 {
+	prio, stopRecursion := typ.getMutationPrio(ma.target, arg, ignoreSpecial)
+	ctx.Stop = stopRecursion
+
+	if prio == dontMutate {
 		return
 	}
+
+	if typ.Dir() == DirOut || !typ.Varlen() && typ.Size() == 0 {
+		return
+	}
+
 	ma.args = append(ma.args, arg)
 	ma.ctxes = append(ma.ctxes, *ctx)
+	ma.priorities = append(ma.priorities, prio)
+}
+
+// TODO: find a way to estimate optimal priority values.
+// Assign a priority for each type. The boolean is the reference type and it has
+// the minimum priority, since it has only two possible values.
+func (t *IntType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	// For a integer without a range of values, the priority is based on
+	// the number of bits occupied by the underlying type.
+	plainPrio := math.Log2((float64(t.Size() * 8))) + 0.1*maxPriority
+	if t.Kind != IntRange {
+		return plainPrio, false
+	}
+
+	switch size := t.RangeEnd - t.RangeBegin + 1; {
+	case size <= 15:
+		// For a small range, we assume that it is effectively
+		// similar with FlagsType and we need to try all possible values.
+		prio = rangeSizePrio(size)
+	case size <= 256:
+		// We consider that a relevant range has at most 256
+		// values (the number of values that can be represented on a byte).
+		prio = maxPriority
+	default:
+		// Ranges larger than 256 are equivalent with a plain integer.
+		prio = plainPrio
+	}
+	return prio, false
+}
+
+func (t *StructType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	if target.SpecialTypes[t.Name()] == nil || ignoreSpecial {
+		return dontMutate, false
+	}
+	return maxPriority, true
+}
+
+func (t *UnionType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	if target.SpecialTypes[t.Name()] == nil && len(t.Fields) == 1 || ignoreSpecial {
+		return dontMutate, false
+	}
+	// For a non-special type union with more than one option
+	// we mutate the union itself and also the value of the current option.
+	if target.SpecialTypes[t.Name()] == nil {
+		return maxPriority, false
+	}
+	return maxPriority, true
+}
+
+func (t *FlagsType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	prio = rangeSizePrio(uint64(len(t.Vals)))
+	if t.BitMask {
+		// We want a higher priority because the mutation will include
+		// more possible operations (bitwise operations).
+		prio += 0.1 * maxPriority
+	}
+	return prio, false
+}
+
+// Assigns a priority based on the range size.
+func rangeSizePrio(size uint64) (prio float64) {
+	switch size {
+	case 0:
+		prio = dontMutate
+	case 1:
+		prio = minPriority
+	default:
+		// Priority proportional with the number of values. After a threshold, the priority is constant.
+		// The threshold is 15 because most of the calls have <= 15 possible values for a flag.
+		prio = math.Min(float64(size)/3+0.4*maxPriority, 0.9*maxPriority)
+	}
+	return prio
+}
+
+func (t *PtrType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	if arg.(*PointerArg).IsSpecial() {
+		// TODO: we ought to mutate this, but we don't have code for this yet.
+		return dontMutate, false
+	}
+	return 0.3 * maxPriority, false
+}
+
+func (t *ConstType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return dontMutate, false
+}
+
+func (t *CsumType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return dontMutate, false
+}
+
+func (t *ProcType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return 0.5 * maxPriority, false
+}
+
+func (t *ResourceType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return 0.5 * maxPriority, false
+}
+
+func (t *VmaType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return 0.5 * maxPriority, false
+}
+
+func (t *LenType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return 0.6 * maxPriority, false
+}
+
+func (t *BufferType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	return 0.8 * maxPriority, false
+}
+
+func (t *ArrayType) getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool) {
+	if t.Kind == ArrayRangeLen && t.RangeBegin == t.RangeEnd {
+		return dontMutate, false
+	}
+	return maxPriority, false
 }
 
 func mutateData(r *randGen, data []byte, minLen, maxLen uint64) []byte {
diff --git a/prog/mutation_test.go b/prog/mutation_test.go
index 100820d..9ae807e 100644
--- a/prog/mutation_test.go
+++ b/prog/mutation_test.go
@@ -6,11 +6,184 @@
 import (
 	"bytes"
 	"fmt"
+	"math"
 	"math/rand"
 	"sync"
 	"testing"
 )
 
+func TestMutationFlags(t *testing.T) {
+	tests := [][2]string{
+		// Mutate flags (bitmask = true).
+		{
+			`r0 = mutate$flags(&(0x7f0000000000)="2e2f66696c653000", 0x0, 0x1, 0x1)`,
+			`r0 = mutate$flags(&(0x7f0000000000)="2e2f66696c653000", 0x20, 0x1, 0x9)`,
+		},
+		{
+			`r0 = mutate$flags2(&(0x7f0000000000)="2e2f66696c653000", 0x0)`,
+			`r0 = mutate$flags2(&(0x7f0000000000)="2e2f66696c653000", 0xd9)`,
+		},
+		// Mutate flags (bitmask = false).
+		{
+			`r0 = mutate$flags3(&(0x7f0000000000)="2e2f66696c653000", 0x0)`,
+			`r0 = mutate$flags3(&(0x7f0000000000)="2e2f66696c653000", 0xddddddddeeeeeeee)`,
+		},
+		{
+			`r0 = mutate$flags3(&(0x7f0000000000)="2e2f66696c653000", 0xddddddddeeeeeeee)`,
+			`r0 = mutate$flags3(&(0x7f0000000000)="2e2f66696c653000", 0xaaaaaaaaaaaaaaaa)`,
+		},
+	}
+	runMutationTests(t, tests)
+}
+
+func TestChooseCall(t *testing.T) {
+	tests := [][2]string{
+		// The call with many arguments has a higher mutation probability.
+		{
+			`mutate0()
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer2(0x00, 0x00, 0x20, 0x00, 0x01)`,
+			`mutate0()
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0xffffffff)
+mutate$integer2(0x00, 0x00, 0x20, 0x00, 0x01)`,
+		},
+		// Calls with the same probability.
+		{
+			`mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)`,
+			`mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0xff)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)`,
+		},
+		// The call with a lower probability can be mutated.
+		{
+			`mutate7(&(0x7f0000000000)='123', 0x3)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+r0 = mutate$flags(&(0x7f0000000000)="2e2f66696c653000", 0x0, 0x1, 0x1)`,
+			`mutate7(&(0x7f0000000000)='123', 0x2)
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)
+r0 = mutate$flags(&(0x7f0000000000)="2e2f66696c653000", 0x0, 0x1, 0x1)`,
+		},
+		// Complex arguments.
+		{
+			`test$struct(&(0x7f0000000000)={0x0, {0x0}})
+test$array0(&(0x7f0000001000)={0x1, [@f0=0x2, @f1=0x3], 0x4})
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)`,
+			`test$struct(&(0x7f0000000000)={0xff, {0x0}})
+test$array0(&(0x7f0000001000)={0x1, [@f0=0x2, @f1=0x3], 0x4})
+mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)`,
+		},
+	}
+	runMutationTests(t, tests)
+}
+
+func TestMutateArgument(t *testing.T) {
+	tests := [][2]string{
+		// Mutate an integer with a higher priority than the boolean arguments.
+		{
+			`mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0x1)`,
+			`mutate$integer(0x0, 0x1, 0x1, 0x1, 0x0, 0x1, 0x0, 0x0, 0xffffffff)`,
+		},
+		// Mutate a boolean.
+		{
+			`mutate$integer(0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0, 0x0)`,
+			`mutate$integer(0x0, 0x0, 0x0, 0x1, 0x0, 0x0, 0x0, 0x0, 0x0)`,
+		},
+		// Mutate flags (bitmask = true).
+		{
+			`r0 = mutate$flags(&(0x7f0000000000)="2e2f66696c653000", 0x0, 0x1, 0x1)`,
+			`r0 = mutate$flags(&(0x7f0000000000)="2e2f66696c653000", 0x20, 0x1, 0x9)`,
+		},
+		// Mutate an int8 from a set of other arguments with higher priority.
+		{
+			`mutate$integer2(0x00, 0x00, 0x20, 0x00, 0x01)`,
+			`mutate$integer2(0x00, 0x00, 0x20, 0x00, 0x07)`,
+		},
+		// Mutate an array of structs
+		{
+			`mutate$array2(&(0x7f0000000000)=[{0x0}, {0x0}, {0x0}, {0x0}, {0x0}])`,
+			`mutate$array2(&(0x7f0000000000)=[{0x0}, {0x0}, {0x3}, {0x0}, {0x0}])`,
+		},
+		// Mutate a non-special union that have more than 1 option
+		{
+			`mutate$union(&(0x7f0000000000)=@f1=[0x0, 0x1, 0x2, 0x3, 0x0, 0x1, 0x2, 0x3, 0x0, 0x0])`,
+			`mutate$union(&(0x7f0000000000)=@f0=0x2)`,
+		},
+		// Mutate the value of the current option in union
+		{
+			`mutate$union(&(0x7f0000000000)=@f1=[0x0, 0x1, 0x2, 0x3, 0x0, 0x1, 0x2, 0x3, 0x0, 0x0])`,
+			`mutate$union(&(0x7f0000000000)=@f1=[0x0, 0x1, 0xff, 0x3, 0x0, 0x1, 0x2, 0x3, 0x0, 0x0])`,
+		},
+	}
+
+	target := initTargetTest(t, "test", "64")
+	for ti, test := range tests {
+		test := test
+		t.Run(fmt.Sprint(ti), func(t *testing.T) {
+			t.Parallel()
+			rs, ct, p, goal, err := buildTestContext(test, target)
+			if err != nil {
+				t.Fatalf("failed to deserialize the program: %v", err)
+			}
+			want := goal.Serialize()
+			for i := 0; i < 1e5; i++ {
+				p1 := p.Clone()
+				ctx := &mutator{
+					p:      p1,
+					r:      newRand(p1.Target, rs),
+					ncalls: 0,
+					ct:     ct,
+					corpus: nil,
+				}
+				ctx.mutateArg()
+				data1 := p1.Serialize()
+				if bytes.Equal(want, data1) {
+					t.Logf("success on iter %v", i)
+					return
+				}
+			}
+			t.Fatalf("failed to achieve goal, original:%s\ngoal:%s", test[0], test[1])
+		})
+	}
+}
+
+func TestRandomChoice(t *testing.T) {
+	t.Parallel()
+	target, err := GetTarget("test", "64")
+	if err != nil {
+		t.Fatal(err)
+	}
+
+	r := newRand(target, randSource(t))
+	priorities := []float64{1, 1, 1, 1, 1, 1, 1, 1, 2}
+
+	const (
+		maxIters    = 100000
+		searchedIdx = 8
+		prob        = 0.2
+		eps         = 0.01
+	)
+
+	var index, count int
+	for i := 0; i < maxIters; i++ {
+		index = randomChoice(priorities, r)
+
+		if index == searchedIdx {
+			count++
+		}
+	}
+
+	diff := math.Abs(prob*maxIters - float64(count))
+	if diff > eps*maxIters {
+		t.Fatalf("The difference (%f) is higher than %f%%", diff, eps*100)
+	}
+}
+
 func TestClone(t *testing.T) {
 	target, rs, iters := initTest(t)
 	for i := 0; i < iters; i++ {
@@ -68,7 +241,6 @@
 }
 
 func TestMutateTable(t *testing.T) {
-	target := initTargetTest(t, "test", "64")
 	tests := [][2]string{
 		// Insert a call.
 		{`
@@ -132,6 +304,12 @@
 mutate5(&(0x7f0000001000)="2e2f66696c653000", 0x22c0)
 mutate5(&(0x7f0000001000)="2e2f66696c653100", 0x22c0)
 `},
+		// Mutate the array.
+		{`
+mutate$array(0x1, 0x30, &(0x7f0000000000)=[0x1, 0x1, 0x1, 0x1, 0x1])
+`, `
+mutate$array(0x1, 0x30, &(0x7f0000000000)=[0x1, 0x1, 0x1, 0x1])
+`},
 		// Extend an array.
 		{`
 mutate3(&(0x7f0000000000)=[0x1, 0x1], 0x2)
@@ -151,50 +329,13 @@
 mutate8(0xffffffffffffffff)
 `},
 	}
-	for ti, test := range tests {
-		test := test
-		t.Run(fmt.Sprint(ti), func(t *testing.T) {
-			t.Parallel()
-			p, err := target.Deserialize([]byte(test[0]), Strict)
-			if err != nil {
-				t.Fatalf("failed to deserialize original program: %v", err)
-			}
-			goal, err := target.Deserialize([]byte(test[1]), Strict)
-			if err != nil {
-				t.Fatalf("failed to deserialize goal program: %v", err)
-			}
-			want := goal.Serialize()
-			enabled := make(map[*Syscall]bool)
-			for _, c := range p.Calls {
-				enabled[c.Meta] = true
-			}
-			for _, c := range goal.Calls {
-				enabled[c.Meta] = true
-			}
-			ct := target.BuildChoiceTable(nil, enabled)
-			rs := rand.NewSource(0)
-			for i := 0; i < 1e5; i++ {
-				p1 := p.Clone()
-				p1.Mutate(rs, len(goal.Calls), ct, nil)
-				data1 := p1.Serialize()
-				if bytes.Equal(want, data1) {
-					t.Logf("success on iter %v", i)
-					return
-				}
-			}
-			t.Fatalf("failed to achieve goal, original:%s\ngoal:%s", test[0], test[1])
-		})
-	}
+
+	runMutationTests(t, tests)
 }
 
 func BenchmarkMutate(b *testing.B) {
-	olddebug := debug
-	debug = false
-	defer func() { debug = olddebug }()
-	target, err := GetTarget("linux", "amd64")
-	if err != nil {
-		b.Fatal(err)
-	}
+	target, cleanup := initBench(b)
+	defer cleanup()
 	ct := linuxAmd64ChoiceTable(target)
 	const progLen = 30
 	p := target.Generate(rand.NewSource(0), progLen, nil)
@@ -208,13 +349,8 @@
 }
 
 func BenchmarkGenerate(b *testing.B) {
-	olddebug := debug
-	debug = false
-	defer func() { debug = olddebug }()
-	target, err := GetTarget("linux", "amd64")
-	if err != nil {
-		b.Fatal(err)
-	}
+	target, cleanup := initBench(b)
+	defer cleanup()
 	ct := linuxAmd64ChoiceTable(target)
 	const progLen = 30
 	b.ResetTimer()
@@ -237,3 +373,49 @@
 	})
 	return linuxCT
 }
+
+func runMutationTests(t *testing.T, tests [][2]string) {
+	target := initTargetTest(t, "test", "64")
+	for ti, test := range tests {
+		test := test
+		t.Run(fmt.Sprint(ti), func(t *testing.T) {
+			t.Parallel()
+			rs, ct, p, goal, err := buildTestContext(test, target)
+			if err != nil {
+				t.Fatalf("failed to deserialize the program: %v", err)
+			}
+			want := goal.Serialize()
+			for i := 0; i < 1e5; i++ {
+				p1 := p.Clone()
+				p1.Mutate(rs, len(goal.Calls), ct, nil)
+				data1 := p1.Serialize()
+				if bytes.Equal(want, data1) {
+					t.Logf("success on iter %v", i)
+					return
+				}
+			}
+			t.Fatalf("failed to achieve goal, original:%s\ngoal:%s", test[0], test[1])
+		})
+	}
+}
+
+func buildTestContext(test [2]string, target *Target) (rs rand.Source, ct *ChoiceTable, p, goal *Prog, err error) {
+	p, err = target.Deserialize([]byte(test[0]), Strict)
+	if err != nil {
+		return
+	}
+	goal, err = target.Deserialize([]byte(test[1]), Strict)
+	if err != nil {
+		return
+	}
+	enabled := make(map[*Syscall]bool)
+	for _, c := range p.Calls {
+		enabled[c.Meta] = true
+	}
+	for _, c := range goal.Calls {
+		enabled[c.Meta] = true
+	}
+	ct = target.BuildChoiceTable(nil, enabled)
+	rs = rand.NewSource(0)
+	return
+}
diff --git a/prog/prog_test.go b/prog/prog_test.go
index 3300eb4..1605f79 100644
--- a/prog/prog_test.go
+++ b/prog/prog_test.go
@@ -74,7 +74,7 @@
 	r := newRand(target, rs)
 	pageSize := target.PageSize
 	for i := 0; i < iters; i++ {
-		s := newState(target, nil)
+		s := newState(target, nil, nil)
 		calls := r.generateParticularCall(s, meta)
 		c := calls[len(calls)-1]
 		if c.Meta.Name != "test$vma0" {
@@ -198,7 +198,7 @@
 				if typ == nil {
 					t.Fatal("can't find struct description")
 				}
-				g := &Gen{newRand(target, rs), newState(target, nil)}
+				g := &Gen{newRand(target, rs), newState(target, nil, nil)}
 				for i := 0; i < iters/len(target.SpecialTypes); i++ {
 					arg, _ := gen(g, typ, nil)
 					gen(g, typ, arg)
diff --git a/prog/rand.go b/prog/rand.go
index e4164b7..cbfc960 100644
--- a/prog/rand.go
+++ b/prog/rand.go
@@ -137,15 +137,35 @@
 	return
 }
 
-func (r *randGen) flags(vv []uint64) (v uint64) {
+// Change a flag value or generate a new one.
+func (r *randGen) flags(vv []uint64, bitmask bool, oldVal uint64) (v uint64) {
+	v = oldVal
+	if r.oneOf(5) {
+		// Ignore the old value sometimes.
+		v = 0
+	}
 	switch {
-	case r.nOutOf(90, 111):
-		for stop := false; !stop; stop = r.bin() {
-			v |= vv[r.rand(len(vv))]
+	case (bitmask && r.nOutOf(7, 10)) || (!bitmask && r.nOutOf(1, 5)):
+		// Try flipping randomly chosen flags.
+		// Prioritized when bitmask == true.
+		for stop := false; !stop; stop = r.oneOf(3) {
+			flag := vv[r.rand(len(vv))]
+			if r.oneOf(5) {
+				// Try choosing adjacent bit values in case we forgot
+				// to add all relevant flags to the descriptions.
+				if r.bin() {
+					flag >>= 1
+				} else {
+					flag <<= 1
+				}
+			}
+			v ^= flag
 		}
-	case r.nOutOf(10, 21):
+	case (bitmask && r.nOutOf(2, 3)) || (!bitmask && r.nOutOf(7, 8)):
+		// Chose a random flag.
+		// Prioritized when bitmask == false.
 		v = vv[r.rand(len(vv))]
-	case r.nOutOf(10, 11):
+	case r.bin():
 		v = 0
 	default:
 		v = r.rand64()
@@ -300,7 +320,7 @@
 		// Generate one of them.
 		meta := metas[r.Intn(len(metas))]
 		calls := r.generateParticularCall(s, meta)
-		s1 := newState(r.target, s.ct)
+		s1 := newState(r.target, s.ct, nil)
 		s1.analyze(calls[len(calls)-1])
 		// Now see if we have what we want.
 		var allres []*ResultArg
@@ -478,7 +498,7 @@
 		Target: target,
 	}
 	r := newRand(target, rs)
-	s := newState(target, nil)
+	s := newState(target, nil, nil)
 	handled := make(map[string]bool)
 	for _, meta := range target.Syscalls {
 		if !strings.HasPrefix(meta.CallName, "syz_") || handled[meta.CallName] {
@@ -587,7 +607,14 @@
 
 func (a *ResourceType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {
 	switch {
-	case r.nOutOf(1000, 1011):
+	case r.nOutOf(2, 5):
+		var res *ResultArg
+		res, calls = resourceCentric(a, s, r)
+		if res == nil {
+			return r.createResource(s, a)
+		}
+		arg = MakeResultArg(a, res, 0)
+	case r.nOutOf(1, 2):
 		// Get an existing resource.
 		alltypes := make([][]*ResultArg, 0, len(s.resources))
 		for _, res1 := range s.resources {
@@ -609,7 +636,7 @@
 		} else {
 			arg, calls = r.createResource(s, a)
 		}
-	case r.nOutOf(10, 11):
+	case r.nOutOf(2, 3):
 		// Create a new resource.
 		arg, calls = r.createResource(s, a)
 	default:
@@ -675,7 +702,7 @@
 }
 
 func (a *FlagsType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {
-	return MakeConstArg(a, r.flags(a.Vals)), nil
+	return MakeConstArg(a, r.flags(a.Vals, a.BitMask, 0)), nil
 }
 
 func (a *ConstType) generate(r *randGen, s *state) (arg Arg, calls []*Call) {
@@ -752,3 +779,75 @@
 	// Filled at runtime by executor.
 	return MakeConstArg(a, 0), nil
 }
+
+// Finds a compatible resource with the type `t` and the calls that initialize that resource.
+func resourceCentric(t *ResourceType, s *state, r *randGen) (resource *ResultArg, calls []*Call) {
+	var p *Prog
+	for idx := range r.Perm(len(s.corpus)) {
+		p = s.corpus[idx].Clone()
+		resources := getCompatibleResources(p, t.TypeName, r)
+		if len(resources) > 0 {
+			resource = resources[r.Intn(len(resources))]
+			break
+		}
+	}
+
+	// No compatible resource was found.
+	if resource == nil {
+		return nil, nil
+	}
+
+	// Set that stores the resources that appear in the same calls with the selected resource.
+	relatedRes := map[*ResultArg]bool{resource: true}
+
+	// Remove unrelated calls from the program.
+	for idx := len(p.Calls) - 1; idx >= 0; idx-- {
+		includeCall := false
+		var newResources []*ResultArg
+		ForeachArg(p.Calls[idx], func(arg Arg, _ *ArgCtx) {
+			if a, ok := arg.(*ResultArg); ok {
+				if a.Res != nil && !relatedRes[a.Res] {
+					newResources = append(newResources, a.Res)
+				}
+				if relatedRes[a] || relatedRes[a.Res] {
+					includeCall = true
+				}
+			}
+		})
+		if !includeCall {
+			p.removeCall(idx)
+		} else {
+			for _, res := range newResources {
+				relatedRes[res] = true
+			}
+		}
+	}
+
+	// Selects a biased random length of the returned calls (more calls could offer more
+	// interesting programs). The values returned (n = len(calls): n, n-1, ..., 2.
+	biasedLen := 2 + r.biasedRand(len(calls)-1, 10)
+
+	// Removes the references that are not used anymore.
+	for i := biasedLen; i < len(calls); i++ {
+		p.removeCall(i)
+	}
+
+	return resource, p.Calls
+}
+
+func getCompatibleResources(p *Prog, resourceType string, r *randGen) (resources []*ResultArg) {
+	for _, c := range p.Calls {
+		ForeachArg(c, func(arg Arg, _ *ArgCtx) {
+			// Collect only initialized resources (the ones that are already used in other calls).
+			a, ok := arg.(*ResultArg)
+			if !ok || len(a.uses) == 0 || a.typ.Dir() != DirOut {
+				return
+			}
+			if !r.target.isCompatibleResource(resourceType, a.typ.Name()) {
+				return
+			}
+			resources = append(resources, a)
+		})
+	}
+	return resources
+}
diff --git a/prog/resources.go b/prog/resources.go
index d935beb..08002ec 100644
--- a/prog/resources.go
+++ b/prog/resources.go
@@ -14,28 +14,14 @@
 	Kind: []string{"timespec"},
 }
 
-func (target *Target) calcResourceCtors(kind []string, precise bool) []*Syscall {
-	// Find calls that produce the necessary resources.
+func (target *Target) calcResourceCtors(res *ResourceDesc, precise bool) []*Syscall {
 	var metas []*Syscall
-	for _, meta := range target.Syscalls {
-		// Recurse into arguments to see if there is an out/inout arg of necessary type.
-		ok := false
-		ForeachType(meta, func(typ Type) {
-			if ok {
-				return
-			}
-			switch typ1 := typ.(type) {
-			case *ResourceType:
-				if typ1.Dir() != DirIn && isCompatibleResourceImpl(kind, typ1.Desc.Kind, precise) {
-					ok = true
-				}
-			}
-		})
-		if ok {
-			metas = append(metas, meta)
+	for _, ctor := range res.Ctors {
+		if !precise || ctor.Precise {
+			metas = append(metas, target.Syscalls[ctor.Call])
 		}
 	}
-	if kind[0] == timespecRes.Name {
+	if res.Kind[0] == timespecRes.Name {
 		if c := target.SyscallMap["clock_gettime"]; c != nil {
 			metas = append(metas, c)
 		}
@@ -43,6 +29,46 @@
 	return metas
 }
 
+func (target *Target) populateResourceCtors() {
+	// Find resources that are created by each call.
+	callsResources := make([][]*ResourceDesc, len(target.Syscalls))
+	for call, meta := range target.Syscalls {
+		ForeachType(meta, func(typ Type) {
+			switch typ1 := typ.(type) {
+			case *ResourceType:
+				if typ1.Dir() != DirIn {
+					callsResources[call] = append(callsResources[call], typ1.Desc)
+				}
+			}
+		})
+	}
+
+	// Populate resource ctors accounting for resource compatibility.
+	for _, res := range target.Resources {
+		for call, callResources := range callsResources {
+			preciseOk := false
+			impreciseOk := false
+			for _, callRes := range callResources {
+				if preciseOk && impreciseOk {
+					break
+				}
+				if isCompatibleResourceImpl(res.Kind, callRes.Kind, true) {
+					preciseOk = true
+				}
+				if isCompatibleResourceImpl(res.Kind, callRes.Kind, false) {
+					impreciseOk = true
+				}
+			}
+			if preciseOk {
+				res.Ctors = append(res.Ctors, ResourceCtor{call, true})
+			}
+			if impreciseOk {
+				res.Ctors = append(res.Ctors, ResourceCtor{call, false})
+			}
+		}
+	}
+}
+
 // isCompatibleResource returns true if resource of kind src can be passed as an argument of kind dst.
 func (target *Target) isCompatibleResource(dst, src string) bool {
 	if dst == target.any.res16.TypeName ||
@@ -172,7 +198,7 @@
 			}
 			if ctors[res.Name] == nil {
 				var names []string
-				for _, call := range target.calcResourceCtors(res.Kind, true) {
+				for _, call := range target.calcResourceCtors(res, true) {
 					names = append(names, call.Name)
 				}
 				ctors[res.Name] = names
diff --git a/prog/target.go b/prog/target.go
index da9b325..d02a3dd 100644
--- a/prog/target.go
+++ b/prog/target.go
@@ -168,9 +168,10 @@
 		})
 	}
 
+	target.populateResourceCtors()
 	target.resourceCtors = make(map[string][]*Syscall)
 	for _, res := range target.Resources {
-		target.resourceCtors[res.Name] = target.calcResourceCtors(res.Kind, false)
+		target.resourceCtors[res.Name] = target.calcResourceCtors(res, false)
 	}
 	initAnyTypes(target)
 }
diff --git a/prog/types.go b/prog/types.go
index 7f95694..9a58a9e 100644
--- a/prog/types.go
+++ b/prog/types.go
@@ -65,6 +65,7 @@
 	isDefaultArg(arg Arg) bool
 	generate(r *randGen, s *state) (arg Arg, calls []*Call)
 	mutate(r *randGen, s *state, arg Arg, ctx ArgCtx) (calls []*Call, retry, preserve bool)
+	getMutationPrio(target *Target, arg Arg, ignoreSpecial bool) (prio float64, stopRecursion bool)
 	minimize(ctx *minimizeArgsCtx, arg Arg, path string) bool
 }
 
@@ -132,6 +133,12 @@
 	Type   Type
 	Kind   []string
 	Values []uint64
+	Ctors  []ResourceCtor
+}
+
+type ResourceCtor struct {
+	Call    int // Index in Target.Syscalls
+	Precise bool
 }
 
 type ResourceType struct {
diff --git a/sys/fuchsia/fuchsia_cobalt.syz.txt b/sys/fuchsia/fuchsia_cobalt.syz.txt
index ecdbdd8..e42c453 100644
--- a/sys/fuchsia/fuchsia_cobalt.syz.txt
+++ b/sys/fuchsia/fuchsia_cobalt.syz.txt
@@ -802,8 +802,10 @@
 } [packed]
 
 fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest {
-	hdr		fidl_message_header[1523993550]
-	day_index	int32
+	hdr			fidl_message_header[1523993550]
+	day_index		int32
+	report_idsInLine	fidl_vector
+	report_idsOutOfLine	array[int32]
 } [packed]
 
 fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequestHandles {
diff --git a/sys/fuchsia/fuchsia_net.syz.txt b/sys/fuchsia/fuchsia_net.syz.txt
index c5cd4dc..1e03809 100644
--- a/sys/fuchsia/fuchsia_net.syz.txt
+++ b/sys/fuchsia/fuchsia_net.syz.txt
@@ -150,21 +150,6 @@
 zx_channel_call$fuchsia_net_NameLookupLookupIp(handle zx_chan_fuchsia_net_NameLookup_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_NameLookupLookupIpRequest, fuchsia_net_NameLookupLookupIpRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_NameLookupLookupIpResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
 zx_channel_call$fuchsia_net_NameLookupLookupHostname(handle zx_chan_fuchsia_net_NameLookup_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_NameLookupLookupHostnameRequest, fuchsia_net_NameLookupLookupHostnameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_NameLookupLookupHostnameResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
 
-fuchsia_net_SocketProviderSocketRequest {
-	hdr		fidl_message_header[316444173]
-	domain		int16
-	type_		int16
-	protocol	int16
-} [packed]
-
-fuchsia_net_SocketProviderSocketRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketProviderSocketResponseHandles {
-	s	zx_socket
-} [packed]
-
 fuchsia_net_SocketProviderGetAddrInfoRequest {
 	hdr			fidl_message_header[498796293]
 	nodeInLine		fidl_string
@@ -188,156 +173,4 @@
 
 zx_channel_create$fuchsia_net_SocketProvider(options const[0], out0 ptr[out, zx_chan_fuchsia_net_SocketProvider_client], out1 ptr[out, zx_chan_fuchsia_net_SocketProvider_server])
 fdio_service_connect$fuchsia_net_SocketProvider(path ptr[in, string["/svc/fuchsia.net.SocketProvider"]], handle zx_chan_fuchsia_net_SocketProvider_server)
-zx_channel_call$fuchsia_net_SocketProviderSocket(handle zx_chan_fuchsia_net_SocketProvider_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
 zx_channel_call$fuchsia_net_SocketProviderGetAddrInfo(handle zx_chan_fuchsia_net_SocketProvider_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketProviderGetAddrInfoRequest, fuchsia_net_SocketProviderGetAddrInfoRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderGetAddrInfoResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-
-fuchsia_net_SocketControlBindRequest {
-	hdr		fidl_message_header[2092731140]
-	addrInLine	fidl_vector
-	addrOutOfLine	array[int8]
-} [packed]
-
-fuchsia_net_SocketControlBindRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlBindResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlConnectRequest {
-	hdr		fidl_message_header[345505709]
-	addrInLine	fidl_vector
-	addrOutOfLine	array[int8]
-} [packed]
-
-fuchsia_net_SocketControlConnectRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlConnectResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlListenRequest {
-	hdr	fidl_message_header[1117818704]
-	backlog	int16
-} [packed]
-
-fuchsia_net_SocketControlListenRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlListenResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlAcceptRequest {
-	hdr	fidl_message_header[796734679]
-	flags_	int16
-} [packed]
-
-fuchsia_net_SocketControlAcceptRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlAcceptResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlCloseRequest {
-	hdr	fidl_message_header[506040350]
-} [packed]
-
-fuchsia_net_SocketControlCloseRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlCloseResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlGetSockNameRequest {
-	hdr	fidl_message_header[764939941]
-} [packed]
-
-fuchsia_net_SocketControlGetSockNameRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlGetSockNameResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlGetPeerNameRequest {
-	hdr	fidl_message_header[472396488]
-} [packed]
-
-fuchsia_net_SocketControlGetPeerNameRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlGetPeerNameResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlSetSockOptRequest {
-	hdr		fidl_message_header[1365685084]
-	level		int16
-	optname		int16
-	optvalInLine	fidl_vector
-	optvalOutOfLine	array[int8]
-} [packed]
-
-fuchsia_net_SocketControlSetSockOptRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlSetSockOptResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlGetSockOptRequest {
-	hdr	fidl_message_header[2132650507]
-	level	int16
-	optname	int16
-} [packed]
-
-fuchsia_net_SocketControlGetSockOptRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlGetSockOptResponseHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlIoctlRequest {
-	hdr		fidl_message_header[1157859964]
-	req		int16
-	inInLine	fidl_vector
-	inOutOfLine	array[int8]
-} [packed]
-
-fuchsia_net_SocketControlIoctlRequestHandles {
-	void	void
-} [packed]
-
-fuchsia_net_SocketControlIoctlResponseHandles {
-	void	void
-} [packed]
-
-resource zx_chan_fuchsia_net_SocketControl_client[zx_chan]
-resource zx_chan_fuchsia_net_SocketControl_server[zx_chan]
-
-zx_channel_create$fuchsia_net_SocketControl(options const[0], out0 ptr[out, zx_chan_fuchsia_net_SocketControl_client], out1 ptr[out, zx_chan_fuchsia_net_SocketControl_server])
-fdio_service_connect$fuchsia_net_SocketControl(path ptr[in, string["/svc/"]], handle zx_chan_fuchsia_net_SocketControl_server)
-zx_channel_call$fuchsia_net_SocketControlBind(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlConnect(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlListen(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlAccept(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlClose(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlGetSockName(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlGetPeerName(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlSetSockOpt(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlGetSockOpt(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
-zx_channel_call$fuchsia_net_SocketControlIoctl(handle zx_chan_fuchsia_net_SocketControl_client, options const[0], deadline zx_time, args ptr[in, fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]], actual_bytes ptr[out, int32], actual_handles ptr[out, int32])
diff --git a/sys/fuchsia/gen/amd64.go b/sys/fuchsia/gen/amd64.go
index c9d3b8b..a81c0ca 100644
--- a/sys/fuchsia/gen/amd64.go
+++ b/sys/fuchsia/gen/amd64.go
@@ -52,8 +52,6 @@
 	{Name: "zx_chan_fuchsia_net_Connectivity_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_Connectivity_server"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_NameLookup_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_NameLookup_client"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_NameLookup_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_NameLookup_server"}, Values: []uint64{0}},
-	{Name: "zx_chan_fuchsia_net_SocketControl_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketControl_client"}, Values: []uint64{0}},
-	{Name: "zx_chan_fuchsia_net_SocketControl_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketControl_server"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_SocketProvider_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketProvider_client"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_SocketProvider_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketProvider_server"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_stack_Stack_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_stack_Stack_client"}, Values: []uint64{0}},
@@ -1329,106 +1327,6 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
 	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlBindResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlCloseResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlConnectResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlListenResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
 	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketProviderGetAddrInfoRequest, fuchsia_net_SocketProviderGetAddrInfoRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderGetAddrInfoResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketProviderGetAddrInfoRequest, fuchsia_net_SocketProviderGetAddrInfoRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderGetAddrInfoResponseHandles]", TypeSize: 48}, Fields: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoRequest"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoRequestHandles"}}},
@@ -1439,16 +1337,6 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
 	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
 	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_stack_StackAddEthernetInterfaceRequest, fuchsia_net_stack_StackAddEthernetInterfaceRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_stack_StackAddEthernetInterfaceResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_stack_StackAddEthernetInterfaceRequest, fuchsia_net_stack_StackAddEthernetInterfaceRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_stack_StackAddEthernetInterfaceResponseHandles]", TypeSize: 48}, Fields: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_stack_StackAddEthernetInterfaceRequest"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_stack_StackAddEthernetInterfaceRequestHandles"}}},
@@ -1705,12 +1593,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1110617141},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[1117818704]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1117818704]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1117818704},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[1118517818]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1118517818]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -1723,12 +1605,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1119663833},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[1157859964]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1157859964]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1157859964},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[1166403528]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1166403528]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -1795,12 +1671,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1343632858},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[1365685084]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1365685084]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1365685084},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[1373297565]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1373297565]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2041,36 +1911,18 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2087865796},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[2092731140]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[2092731140]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2092731140},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[2120159974]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[2120159974]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2120159974},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[2132650507]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[2132650507]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2132650507},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[281534132]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[281534132]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 281534132},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[316444173]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[316444173]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 316444173},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[324887181]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[324887181]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2089,12 +1941,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 343996832},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[345505709]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[345505709]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 345505709},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[351572256]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[351572256]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2155,12 +2001,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 462052964},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[472396488]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[472396488]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 472396488},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[498796293]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[498796293]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2173,12 +2013,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 503331302},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[506040350]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[506040350]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 506040350},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[523329667]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[523329667]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2317,12 +2151,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 759190088},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[764939941]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[764939941]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 764939941},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[782580781]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[782580781]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2335,12 +2163,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 787943096},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[796734679]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[796734679]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 796734679},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[818031436]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[818031436]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2525,9 +2347,11 @@
 	{Key: StructKey{Name: "fuchsia_cobalt_ControllerBlockUntilEmptyResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerBlockUntilEmptyResponseHandles", ArgDir: 1}, Fields: []Type{
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
 	}}},
-	{Key: StructKey{Name: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest", TypeSize: 20}, Fields: []Type{
+	{Key: StructKey{Name: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "fidl_message_header[1523993550]"}, FldName: "hdr"},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "day_index", TypeSize: 4}}},
+		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "report_idsInLine"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "report_idsOutOfLine", IsVarlen: true}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}},
 	}}},
 	{Key: StructKey{Name: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequestHandles"}, Fields: []Type{
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
@@ -4205,111 +4029,6 @@
 	{Key: StructKey{Name: "fuchsia_net_NameLookup_LookupIp_ResultHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_NameLookup_LookupIp_ResultHandles", ArgDir: 1, IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "fuchsia_net_NameLookup_LookupIp_ResponseHandles", Dir: 1}, FldName: "response"},
 	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlAcceptRequest", TypeSize: 18}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[796734679]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "flags_", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlAcceptRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlAcceptResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlBindRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[2092731140]"}, FldName: "hdr"},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "addrInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "addrOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlBindRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlBindResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlBindResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlCloseRequest", TypeSize: 16}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[506040350]"}, FldName: "hdr"},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlCloseRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlCloseResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlCloseResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlConnectRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[345505709]"}, FldName: "hdr"},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "addrInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "addrOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlConnectRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlConnectResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlConnectResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetPeerNameRequest", TypeSize: 16}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[472396488]"}, FldName: "hdr"},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetPeerNameRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetPeerNameResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockNameRequest", TypeSize: 16}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[764939941]"}, FldName: "hdr"},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockNameRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockNameResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockOptRequest", TypeSize: 20}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[2132650507]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "level", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "optname", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockOptRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockOptResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlIoctlRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[1157859964]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "req", TypeSize: 2}}},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "inInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "inOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlIoctlRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlIoctlResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlListenRequest", TypeSize: 18}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[1117818704]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "backlog", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlListenRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlListenResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlListenResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlSetSockOptRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[1365685084]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "level", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "optname", TypeSize: 2}}},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "optvalInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "optvalOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlSetSockOptRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlSetSockOptResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
 	{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderGetAddrInfoRequest", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "fidl_message_header[498796293]"}, FldName: "hdr"},
 		&StructType{Key: StructKey{Name: "fidl_string"}, FldName: "nodeInLine"},
@@ -4325,18 +4044,6 @@
 	{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderGetAddrInfoResponseHandles", ArgDir: 1}, Fields: []Type{
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "resHandles", ArgDir: 1}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_AddrInfoHandles", Dir: 1}}, Kind: 1, RangeBegin: 4, RangeEnd: 4},
 	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderSocketRequest", TypeSize: 22}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[316444173]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "domain", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "type_", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "protocol", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderSocketRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderSocketResponseHandles", TypeSize: 4, ArgDir: 1}, Fields: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "s", TypeSize: 4, ArgDir: 1}},
-	}}},
 	{Key: StructKey{Name: "fuchsia_net_SubnetHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SubnetHandles"}, Fields: []Type{
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
 	}}},
@@ -5096,10 +4803,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 28}, Kind: 2, Values: []string{"/svc/fuchsia.net.NameLookup\x00"}}},
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_NameLookup_server", FldName: "handle", TypeSize: 4}},
 	}},
-	{Name: "fdio_service_connect$fuchsia_net_SocketControl", CallName: "fdio_service_connect", Args: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 6}, Kind: 2, Values: []string{"/svc/\x00"}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_server", FldName: "handle", TypeSize: 4}},
-	}},
 	{Name: "fdio_service_connect$fuchsia_net_SocketProvider", CallName: "fdio_service_connect", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 32}, Kind: 2, Values: []string{"/svc/fuchsia.net.SocketProvider\x00"}}},
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_server", FldName: "handle", TypeSize: 4}},
@@ -6317,86 +6020,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlAccept", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlBind", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlClose", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlConnect", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlGetPeerName", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlGetSockName", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlGetSockOpt", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlIoctl", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlListen", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlSetSockOpt", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
 	{Name: "zx_channel_call$fuchsia_net_SocketProviderGetAddrInfo", CallName: "zx_channel_call", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_client", FldName: "handle", TypeSize: 4}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
@@ -6405,14 +6028,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketProviderSocket", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
 	{Name: "zx_channel_call$fuchsia_net_stack_StackAddEthernetInterface", CallName: "zx_channel_call", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_stack_Stack_client", FldName: "handle", TypeSize: 4}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
@@ -6679,11 +6294,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_NameLookup_client", TypeSize: 4, ArgDir: 1}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out1", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_NameLookup_server", TypeSize: 4, ArgDir: 1}}},
 	}},
-	{Name: "zx_channel_create$fuchsia_net_SocketControl", CallName: "zx_channel_create", Args: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", TypeSize: 4, ArgDir: 1}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out1", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_server", TypeSize: 4, ArgDir: 1}}},
-	}},
 	{Name: "zx_channel_create$fuchsia_net_SocketProvider", CallName: "zx_channel_create", Args: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_client", TypeSize: 4, ArgDir: 1}}},
@@ -7345,33 +6955,25 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "arg1", TypeSize: 8}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "arg2", TypeSize: 8}}},
 	}},
-	{Name: "zx_socket_accept", CallName: "zx_socket_accept", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out_socket", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", TypeSize: 4, ArgDir: 1}}},
-	}},
 	{Name: "zx_socket_create", CallName: "zx_socket_create", Args: []Type{
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_create_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_create_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{0, 1}, BitMask: true},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", TypeSize: 4, ArgDir: 1}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out1", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", TypeSize: 4, ArgDir: 1}}},
 	}},
 	{Name: "zx_socket_read", CallName: "zx_socket_read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_read_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{4}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_read_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{1}, BitMask: true},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buffer", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buffer"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 8, ArgDir: 1}}}},
 	}},
-	{Name: "zx_socket_share", CallName: "zx_socket_share", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "socket_to_share", TypeSize: 4}},
-	}},
 	{Name: "zx_socket_shutdown", CallName: "zx_socket_shutdown", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handlez", TypeSize: 4}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_shutdown_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{2, 1}, BitMask: true},
 	}},
 	{Name: "zx_socket_write", CallName: "zx_socket_write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_write_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{4, 2, 1}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_write_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{1, 2, 1}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buffer", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buffer"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 8, ArgDir: 1}}}},
@@ -7734,9 +7336,8 @@
 	{Name: "ZX_RIGHT_SIGNAL_PEER", Value: 8192},
 	{Name: "ZX_RIGHT_TRANSFER", Value: 2},
 	{Name: "ZX_RIGHT_WRITE", Value: 8},
-	{Name: "ZX_SOCKET_CONTROL", Value: 4},
+	{Name: "ZX_SOCKET_CREATE_MASK", Value: 1},
 	{Name: "ZX_SOCKET_DATAGRAM", Value: 1},
-	{Name: "ZX_SOCKET_HAS_CONTROL", Value: 2},
 	{Name: "ZX_SOCKET_SHUTDOWN_READ", Value: 2},
 	{Name: "ZX_SOCKET_SHUTDOWN_WRITE", Value: 1},
 	{Name: "ZX_SOCKET_STREAM"},
@@ -7794,4 +7395,4 @@
 	{Name: "fuchsia_power_Status_OK"},
 }
 
-const revision_amd64 = "0831ecb34bc4bfd3c444366782fdbd3fafe56026"
+const revision_amd64 = "f0ef39210d9bc1961aa7d4b3cbb065e1e1e3824b"
diff --git a/sys/fuchsia/gen/arm64.go b/sys/fuchsia/gen/arm64.go
index 33e7c9c..2ce81de 100644
--- a/sys/fuchsia/gen/arm64.go
+++ b/sys/fuchsia/gen/arm64.go
@@ -52,8 +52,6 @@
 	{Name: "zx_chan_fuchsia_net_Connectivity_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_Connectivity_server"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_NameLookup_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_NameLookup_client"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_NameLookup_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_NameLookup_server"}, Values: []uint64{0}},
-	{Name: "zx_chan_fuchsia_net_SocketControl_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketControl_client"}, Values: []uint64{0}},
-	{Name: "zx_chan_fuchsia_net_SocketControl_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketControl_server"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_SocketProvider_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketProvider_client"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_SocketProvider_server", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_SocketProvider_server"}, Values: []uint64{0}},
 	{Name: "zx_chan_fuchsia_net_stack_Stack_client", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"zx_handle", "zx_chan", "zx_chan_fuchsia_net_stack_Stack_client"}, Values: []uint64{0}},
@@ -1329,106 +1327,6 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
 	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlBindResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlCloseResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlConnectResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlListenResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
 	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketProviderGetAddrInfoRequest, fuchsia_net_SocketProviderGetAddrInfoRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderGetAddrInfoResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketProviderGetAddrInfoRequest, fuchsia_net_SocketProviderGetAddrInfoRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderGetAddrInfoResponseHandles]", TypeSize: 48}, Fields: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoRequest"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoRequestHandles"}}},
@@ -1439,16 +1337,6 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
 	}}},
-	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]", TypeSize: 48}, Fields: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequest"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequestHandles"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_bytes", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", TypeSize: 65536, ArgDir: 1}, Kind: 1, RangeBegin: 65536, RangeEnd: 65536}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "rd_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketResponseHandles", Dir: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "wr_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"wr_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "wr_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"wr_handles"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "rd_num_bytes", TypeSize: 4}}, BitSize: 8, Path: []string{"rd_bytes"}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize4", FldName: "rd_num_handles", TypeSize: 4}}, BitSize: 32, Path: []string{"rd_handles"}},
-	}}},
 	{Key: StructKey{Name: "fidl_call_args[fuchsia_net_stack_StackAddEthernetInterfaceRequest, fuchsia_net_stack_StackAddEthernetInterfaceRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_stack_StackAddEthernetInterfaceResponseHandles]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_call_args[fuchsia_net_stack_StackAddEthernetInterfaceRequest, fuchsia_net_stack_StackAddEthernetInterfaceRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_stack_StackAddEthernetInterfaceResponseHandles]", TypeSize: 48}, Fields: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_bytes", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_stack_StackAddEthernetInterfaceRequest"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "wr_handles", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_stack_StackAddEthernetInterfaceRequestHandles"}}},
@@ -1705,12 +1593,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1110617141},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[1117818704]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1117818704]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1117818704},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[1118517818]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1118517818]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -1723,12 +1605,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1119663833},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[1157859964]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1157859964]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1157859964},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[1166403528]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1166403528]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -1795,12 +1671,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1343632858},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[1365685084]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1365685084]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 1365685084},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[1373297565]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[1373297565]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2041,36 +1911,18 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2087865796},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[2092731140]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[2092731140]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2092731140},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[2120159974]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[2120159974]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2120159974},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[2132650507]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[2132650507]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 2132650507},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[281534132]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[281534132]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 281534132},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[316444173]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[316444173]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 316444173},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[324887181]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[324887181]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2089,12 +1941,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 343996832},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[345505709]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[345505709]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 345505709},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[351572256]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[351572256]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2155,12 +2001,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 462052964},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[472396488]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[472396488]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 472396488},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[498796293]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[498796293]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2173,12 +2013,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 503331302},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[506040350]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[506040350]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 506040350},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[523329667]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[523329667]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2317,12 +2151,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 759190088},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[764939941]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[764939941]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 764939941},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[782580781]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[782580781]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2335,12 +2163,6 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 787943096},
 	}}},
-	{Key: StructKey{Name: "fidl_message_header[796734679]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[796734679]", TypeSize: 16}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "ordinal", TypeSize: 4}}, Val: 796734679},
-	}}},
 	{Key: StructKey{Name: "fidl_message_header[818031436]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fidl_message_header[818031436]", TypeSize: 16}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "txid", TypeSize: 4}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "reserved", TypeSize: 4}}},
@@ -2525,9 +2347,11 @@
 	{Key: StructKey{Name: "fuchsia_cobalt_ControllerBlockUntilEmptyResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerBlockUntilEmptyResponseHandles", ArgDir: 1}, Fields: []Type{
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
 	}}},
-	{Key: StructKey{Name: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest", TypeSize: 20}, Fields: []Type{
+	{Key: StructKey{Name: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequest", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "fidl_message_header[1523993550]"}, FldName: "hdr"},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "day_index", TypeSize: 4}}},
+		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "report_idsInLine"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "report_idsOutOfLine", IsVarlen: true}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}},
 	}}},
 	{Key: StructKey{Name: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_cobalt_ControllerGenerateAggregatedObservationsRequestHandles"}, Fields: []Type{
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
@@ -4205,111 +4029,6 @@
 	{Key: StructKey{Name: "fuchsia_net_NameLookup_LookupIp_ResultHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_NameLookup_LookupIp_ResultHandles", ArgDir: 1, IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "fuchsia_net_NameLookup_LookupIp_ResponseHandles", Dir: 1}, FldName: "response"},
 	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlAcceptRequest", TypeSize: 18}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[796734679]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "flags_", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlAcceptRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlAcceptResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlAcceptResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlBindRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[2092731140]"}, FldName: "hdr"},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "addrInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "addrOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlBindRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlBindRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlBindResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlBindResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlCloseRequest", TypeSize: 16}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[506040350]"}, FldName: "hdr"},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlCloseRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlCloseRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlCloseResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlCloseResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlConnectRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[345505709]"}, FldName: "hdr"},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "addrInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "addrOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlConnectRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlConnectRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlConnectResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlConnectResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetPeerNameRequest", TypeSize: 16}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[472396488]"}, FldName: "hdr"},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetPeerNameRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetPeerNameResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetPeerNameResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockNameRequest", TypeSize: 16}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[764939941]"}, FldName: "hdr"},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockNameRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockNameResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockNameResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockOptRequest", TypeSize: 20}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[2132650507]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "level", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "optname", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockOptRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlGetSockOptResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlGetSockOptResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlIoctlRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[1157859964]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "req", TypeSize: 2}}},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "inInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "inOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlIoctlRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlIoctlResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlIoctlResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlListenRequest", TypeSize: 18}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[1117818704]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "backlog", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlListenRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlListenRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlListenResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlListenResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlSetSockOptRequest", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[1365685084]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "level", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "optname", TypeSize: 2}}},
-		&StructType{Key: StructKey{Name: "fidl_vector"}, FldName: "optvalInLine"},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "optvalOutOfLine", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlSetSockOptRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketControlSetSockOptResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketControlSetSockOptResponseHandles", ArgDir: 1}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void", ArgDir: 1}, Kind: 1},
-	}}},
 	{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderGetAddrInfoRequest", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "fidl_message_header[498796293]"}, FldName: "hdr"},
 		&StructType{Key: StructKey{Name: "fidl_string"}, FldName: "nodeInLine"},
@@ -4325,18 +4044,6 @@
 	{Key: StructKey{Name: "fuchsia_net_SocketProviderGetAddrInfoResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderGetAddrInfoResponseHandles", ArgDir: 1}, Fields: []Type{
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "resHandles", ArgDir: 1}, Type: &StructType{Key: StructKey{Name: "fuchsia_net_AddrInfoHandles", Dir: 1}}, Kind: 1, RangeBegin: 4, RangeEnd: 4},
 	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequest"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderSocketRequest", TypeSize: 22}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "fidl_message_header[316444173]"}, FldName: "hdr"},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "domain", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "type_", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "protocol", TypeSize: 2}}},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketRequestHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderSocketRequestHandles"}, Fields: []Type{
-		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
-	}}},
-	{Key: StructKey{Name: "fuchsia_net_SocketProviderSocketResponseHandles", Dir: 1}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SocketProviderSocketResponseHandles", TypeSize: 4, ArgDir: 1}, Fields: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "s", TypeSize: 4, ArgDir: 1}},
-	}}},
 	{Key: StructKey{Name: "fuchsia_net_SubnetHandles"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "fuchsia_net_SubnetHandles"}, Fields: []Type{
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "void"}, Kind: 1},
 	}}},
@@ -5096,10 +4803,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 28}, Kind: 2, Values: []string{"/svc/fuchsia.net.NameLookup\x00"}}},
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_NameLookup_server", FldName: "handle", TypeSize: 4}},
 	}},
-	{Name: "fdio_service_connect$fuchsia_net_SocketControl", CallName: "fdio_service_connect", Args: []Type{
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 6}, Kind: 2, Values: []string{"/svc/\x00"}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_server", FldName: "handle", TypeSize: 4}},
-	}},
 	{Name: "fdio_service_connect$fuchsia_net_SocketProvider", CallName: "fdio_service_connect", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 32}, Kind: 2, Values: []string{"/svc/fuchsia.net.SocketProvider\x00"}}},
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_server", FldName: "handle", TypeSize: 4}},
@@ -6317,86 +6020,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlAccept", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlAcceptRequest, fuchsia_net_SocketControlAcceptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlAcceptResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlBind", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlBindRequest, fuchsia_net_SocketControlBindRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlBindResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlClose", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlCloseRequest, fuchsia_net_SocketControlCloseRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlCloseResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlConnect", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlConnectRequest, fuchsia_net_SocketControlConnectRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlConnectResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlGetPeerName", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetPeerNameRequest, fuchsia_net_SocketControlGetPeerNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetPeerNameResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlGetSockName", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockNameRequest, fuchsia_net_SocketControlGetSockNameRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockNameResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlGetSockOpt", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlGetSockOptRequest, fuchsia_net_SocketControlGetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlGetSockOptResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlIoctl", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlIoctlRequest, fuchsia_net_SocketControlIoctlRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlIoctlResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlListen", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlListenRequest, fuchsia_net_SocketControlListenRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlListenResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketControlSetSockOpt", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketControlSetSockOptRequest, fuchsia_net_SocketControlSetSockOptRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketControlSetSockOptResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
 	{Name: "zx_channel_call$fuchsia_net_SocketProviderGetAddrInfo", CallName: "zx_channel_call", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_client", FldName: "handle", TypeSize: 4}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
@@ -6405,14 +6028,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
 	}},
-	{Name: "zx_channel_call$fuchsia_net_SocketProviderSocket", CallName: "zx_channel_call", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_client", FldName: "handle", TypeSize: 4}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_time", FldName: "deadline", TypeSize: 8}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "args", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "fidl_call_args[fuchsia_net_SocketProviderSocketRequest, fuchsia_net_SocketProviderSocketRequestHandles, array[int8, ZX_CHANNEL_MAX_MSG_BYTES], fuchsia_net_SocketProviderSocketResponseHandles]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_bytes", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual_handles", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4, ArgDir: 1}}}},
-	}},
 	{Name: "zx_channel_call$fuchsia_net_stack_StackAddEthernetInterface", CallName: "zx_channel_call", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_stack_Stack_client", FldName: "handle", TypeSize: 4}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
@@ -6679,11 +6294,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_NameLookup_client", TypeSize: 4, ArgDir: 1}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out1", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_NameLookup_server", TypeSize: 4, ArgDir: 1}}},
 	}},
-	{Name: "zx_channel_create$fuchsia_net_SocketControl", CallName: "zx_channel_create", Args: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_client", TypeSize: 4, ArgDir: 1}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out1", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketControl_server", TypeSize: 4, ArgDir: 1}}},
-	}},
 	{Name: "zx_channel_create$fuchsia_net_SocketProvider", CallName: "zx_channel_create", Args: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "options", TypeSize: 8}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_chan_fuchsia_net_SocketProvider_client", TypeSize: 4, ArgDir: 1}}},
@@ -7345,33 +6955,25 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "arg1", TypeSize: 8}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "arg2", TypeSize: 8}}},
 	}},
-	{Name: "zx_socket_accept", CallName: "zx_socket_accept", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out_socket", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", TypeSize: 4, ArgDir: 1}}},
-	}},
 	{Name: "zx_socket_create", CallName: "zx_socket_create", Args: []Type{
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_create_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_create_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{0, 1}, BitMask: true},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out0", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", TypeSize: 4, ArgDir: 1}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "out1", TypeSize: 8}, Type: &ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", TypeSize: 4, ArgDir: 1}}},
 	}},
 	{Name: "zx_socket_read", CallName: "zx_socket_read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_read_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{4}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_read_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{1}, BitMask: true},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buffer", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buffer"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 8, ArgDir: 1}}}},
 	}},
-	{Name: "zx_socket_share", CallName: "zx_socket_share", Args: []Type{
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "socket_to_share", TypeSize: 4}},
-	}},
 	{Name: "zx_socket_shutdown", CallName: "zx_socket_shutdown", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handlez", TypeSize: 4}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_shutdown_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{2, 1}, BitMask: true},
 	}},
 	{Name: "zx_socket_write", CallName: "zx_socket_write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "zx_socket", FldName: "handle", TypeSize: 4}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_write_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{4, 2, 1}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "socket_write_options", FldName: "options", TypeSize: 8}}, Vals: []uint64{1, 2, 1}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buffer", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buffer"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "actual", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", TypeSize: 8, ArgDir: 1}}}},
@@ -7734,9 +7336,8 @@
 	{Name: "ZX_RIGHT_SIGNAL_PEER", Value: 8192},
 	{Name: "ZX_RIGHT_TRANSFER", Value: 2},
 	{Name: "ZX_RIGHT_WRITE", Value: 8},
-	{Name: "ZX_SOCKET_CONTROL", Value: 4},
+	{Name: "ZX_SOCKET_CREATE_MASK", Value: 1},
 	{Name: "ZX_SOCKET_DATAGRAM", Value: 1},
-	{Name: "ZX_SOCKET_HAS_CONTROL", Value: 2},
 	{Name: "ZX_SOCKET_SHUTDOWN_READ", Value: 2},
 	{Name: "ZX_SOCKET_SHUTDOWN_WRITE", Value: 1},
 	{Name: "ZX_SOCKET_STREAM"},
@@ -7794,4 +7395,4 @@
 	{Name: "fuchsia_power_Status_OK"},
 }
 
-const revision_arm64 = "b643855d1cb7438abcacb87d29a4dfdd49961397"
+const revision_arm64 = "6a8f950f7eee2c03aa38625f64563d19c3548436"
diff --git a/sys/fuchsia/sockets.txt b/sys/fuchsia/sockets.txt
index c63160b..e7fbf63 100644
--- a/sys/fuchsia/sockets.txt
+++ b/sys/fuchsia/sockets.txt
@@ -5,14 +5,12 @@
 
 resource zx_socket[zx_handle]
 
-zx_socket_accept(handle zx_socket, out_socket ptr[out, zx_socket])
 zx_socket_create(options flags[socket_create_options], out0 ptr[out, zx_socket], out1 ptr[out, zx_socket])
 zx_socket_read(handle zx_socket, options flags[socket_read_options], buffer ptr[out, array[int8]], size len[buffer], actual ptr[out, intptr])
-zx_socket_share(handle zx_socket, socket_to_share zx_socket)
 zx_socket_write(handle zx_socket, options flags[socket_write_options], buffer ptr[in, array[int8]], size len[buffer], actual ptr[out, intptr])
 zx_socket_shutdown(handlez zx_socket, options flags[socket_shutdown_options])
 
-socket_create_options = ZX_SOCKET_STREAM, ZX_SOCKET_DATAGRAM, ZX_SOCKET_HAS_CONTROL
-socket_read_options = ZX_SOCKET_CONTROL
-socket_write_options = ZX_SOCKET_CONTROL, ZX_SOCKET_SHUTDOWN_READ, ZX_SOCKET_SHUTDOWN_WRITE
+socket_create_options = ZX_SOCKET_STREAM, ZX_SOCKET_DATAGRAM
+socket_read_options = ZX_SOCKET_CREATE_MASK
+socket_write_options = ZX_SOCKET_CREATE_MASK, ZX_SOCKET_SHUTDOWN_READ, ZX_SOCKET_SHUTDOWN_WRITE
 socket_shutdown_options = ZX_SOCKET_SHUTDOWN_READ, ZX_SOCKET_SHUTDOWN_WRITE
diff --git a/sys/fuchsia/sockets_amd64.const b/sys/fuchsia/sockets_amd64.const
index a933bc0..275788b 100644
--- a/sys/fuchsia/sockets_amd64.const
+++ b/sys/fuchsia/sockets_amd64.const
@@ -1,7 +1,6 @@
 # AUTOGENERATED FILE
-ZX_SOCKET_CONTROL = 4
+ZX_SOCKET_CREATE_MASK = 1
 ZX_SOCKET_DATAGRAM = 1
-ZX_SOCKET_HAS_CONTROL = 2
 ZX_SOCKET_SHUTDOWN_READ = 2
 ZX_SOCKET_SHUTDOWN_WRITE = 1
 ZX_SOCKET_STREAM = 0
diff --git a/sys/fuchsia/sockets_arm64.const b/sys/fuchsia/sockets_arm64.const
index a933bc0..275788b 100644
--- a/sys/fuchsia/sockets_arm64.const
+++ b/sys/fuchsia/sockets_arm64.const
@@ -1,7 +1,6 @@
 # AUTOGENERATED FILE
-ZX_SOCKET_CONTROL = 4
+ZX_SOCKET_CREATE_MASK = 1
 ZX_SOCKET_DATAGRAM = 1
-ZX_SOCKET_HAS_CONTROL = 2
 ZX_SOCKET_SHUTDOWN_READ = 2
 ZX_SOCKET_SHUTDOWN_WRITE = 1
 ZX_SOCKET_STREAM = 0
diff --git a/sys/linux/dev_char_usb.txt b/sys/linux/dev_char_usb.txt
new file mode 100644
index 0000000..f75196b
--- /dev/null
+++ b/sys/linux/dev_char_usb.txt
@@ -0,0 +1,11 @@
+# Copyright 2019 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+include <include/linux/usb.h>
+
+resource fd_char_usb[fd]
+
+syz_open_dev$char_usb(dev const[0xc], major const[USB_MAJOR], minor intptr) fd_char_usb
+
+read$char_usb(fd fd_char_usb, buf buffer[out], count len[buf])
+write$char_usb(fd fd_char_usb, buf buffer[in], count len[buf])
diff --git a/sys/linux/dev_char_usb_386.const b/sys/linux/dev_char_usb_386.const
new file mode 100644
index 0000000..cdb2601
--- /dev/null
+++ b/sys/linux/dev_char_usb_386.const
@@ -0,0 +1,4 @@
+# AUTOGENERATED FILE
+USB_MAJOR = 180
+__NR_read = 3
+__NR_write = 4
diff --git a/sys/linux/dev_char_usb_amd64.const b/sys/linux/dev_char_usb_amd64.const
new file mode 100644
index 0000000..cc03c76
--- /dev/null
+++ b/sys/linux/dev_char_usb_amd64.const
@@ -0,0 +1,4 @@
+# AUTOGENERATED FILE
+USB_MAJOR = 180
+__NR_read = 0
+__NR_write = 1
diff --git a/sys/linux/dev_char_usb_arm.const b/sys/linux/dev_char_usb_arm.const
new file mode 100644
index 0000000..cdb2601
--- /dev/null
+++ b/sys/linux/dev_char_usb_arm.const
@@ -0,0 +1,4 @@
+# AUTOGENERATED FILE
+USB_MAJOR = 180
+__NR_read = 3
+__NR_write = 4
diff --git a/sys/linux/dev_char_usb_arm64.const b/sys/linux/dev_char_usb_arm64.const
new file mode 100644
index 0000000..aa7f809
--- /dev/null
+++ b/sys/linux/dev_char_usb_arm64.const
@@ -0,0 +1,4 @@
+# AUTOGENERATED FILE
+USB_MAJOR = 180
+__NR_read = 63
+__NR_write = 64
diff --git a/sys/linux/dev_char_usb_ppc64le.const b/sys/linux/dev_char_usb_ppc64le.const
new file mode 100644
index 0000000..cdb2601
--- /dev/null
+++ b/sys/linux/dev_char_usb_ppc64le.const
@@ -0,0 +1,4 @@
+# AUTOGENERATED FILE
+USB_MAJOR = 180
+__NR_read = 3
+__NR_write = 4
diff --git a/sys/linux/gen/386.go b/sys/linux/gen/386.go
index 8ed7761..6810b12 100644
--- a/sys/linux/gen/386.go
+++ b/sys/linux/gen/386.go
@@ -40,6 +40,7 @@
 	{Name: "fd_cgroup_pid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_pid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_subtree", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_subtree"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_type", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_type"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_char_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_char_usb"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dir", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dir"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_dma_buf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dma_buf"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dmabuf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dmabuf"}, Values: []uint64{18446744073709551615}},
@@ -112,6 +113,8 @@
 	{Name: "fd_uhid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uhid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_uinput", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uinput"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ecm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ecm"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ncm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ncm"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_hid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_hid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_printer", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_printer"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usbmon", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_usbmon"}, Values: []uint64{18446744073709551615}},
@@ -25343,11 +25346,12 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 2},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_acm_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2, 4, 8}, BitMask: true},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 4}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDataInterface", TypeSize: 1}}},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_country_functional_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25364,40 +25368,42 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxCommand", TypeSize: 2}}},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mac"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mac", TypeSize: 24}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data0", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data1", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data2", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mbm_guid", TypeSize: 16}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id0", TypeSize: 8}}, Val: 94397490813999011},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id1", TypeSize: 8}}, Val: 3042602437899716518},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_ether_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ether_desc", TypeSize: 13}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 15},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iMACAddress", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iMACAddress", TypeSize: 1}}, Val: 1},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "bmEthernetStatistics", TypeSize: 4}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxSegmentSize", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wNumberMCFilters", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumberPowerFilters", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_generic", IsVarlen: true}, Fields: []Type{
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_types", FldName: "bDescriptorSubType", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 6, 7, 10, 15, 17, 18, 19, 20, 21, 26, 27, 28}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "usb_cdc_header"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header", IsVarlen: true}, Fields: []Type{
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "items", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_item"}}, Kind: 1, RangeEnd: 16},
-	}}},
 	{Key: StructKey{Name: "usb_cdc_header_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_desc", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdCDC", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_header_item"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_item", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_cdc_generic"}, FldName: "generic"},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet_other", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
 		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
-		&StructType{Key: StructKey{Name: "usb_cdc_union_desc"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
 		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
-		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
 		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
@@ -25406,6 +25412,25 @@
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, FldName: "union"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ncm_desc"}, FldName: "ncm"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ncm_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm_other", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
+		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
+		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
+		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
+		&StructType{Key: StructKey{Name: "usb_cdc_obex_desc"}, FldName: "obex"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_mbim_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mbim_desc", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
@@ -25430,7 +25455,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 18},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bGUID", TypeSize: 16}, Kind: 1, RangeBegin: 16, RangeEnd: 16},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, FldName: "bGUID"},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mdlm_detail_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25475,24 +25500,60 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 21},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_union_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 0]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMasterInterface0", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 1]", IsVarlen: true}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}, Val: 1},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumInterfaces", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, FldName: "interfaces"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumInterfaces", TypeSize: 1}}, Path: []string{"interfaces"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25503,7 +25564,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25514,7 +25575,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25523,7 +25584,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 4},
 	}}},
 	{Key: StructKey{Name: "usb_dev_cap"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_dev_cap", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_cap_descriptor"}, FldName: "generic"},
@@ -25537,11 +25598,17 @@
 	{Key: StructKey{Name: "usb_device_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 64, array[usb_config_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
@@ -25550,13 +25617,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
@@ -25567,36 +25634,79 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1008},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 27671},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42152},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[flags[usb_endpoint_addresses, int8], flags[usb_endpoint_attributes, int8], array[usb_endpoint_extra_descriptor, 0:2]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_in", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_notify", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_out", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_hid_in", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
@@ -25609,12 +25719,45 @@
 	{Key: StructKey{Name: "usb_endpoint_descriptor_printer_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_printer_out", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_PRINTER_OUT_ADDRESS, int8], const[USB_ENDPOINT_PRINTER_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25625,7 +25768,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 2},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25636,7 +25779,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25647,7 +25790,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 1},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25658,12 +25801,21 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_addresses", FldName: "bEndpointAddress", TypeSize: 1}}, Vals: []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 128}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 3, 0, 16, 0, 4, 8, 12, 0, 16, 16}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_endpoint_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "notify", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}}, Kind: 1, RangeEnd: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ncm_data", TypeSize: 18}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, FldName: "in"},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "out", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_out"}}, Kind: 1, RangeEnd: 1},
@@ -25733,15 +25885,70 @@
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hub_change_flags", FldName: "wHubChange", TypeSize: 2}}, Vals: []uint64{1, 2}, BitMask: true},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ncm"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 2, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
@@ -25754,36 +25961,41 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_interface_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "endpoints", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor"}}, Kind: 1, RangeEnd: 16},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
-		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
-	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "endpoints"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]", TypeSize: 27}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptors_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, FldName: "control"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, FldName: "data_nop"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_extra_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_extra_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_descriptor"}, FldName: "generic"},
 		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "hid_hid"},
-		&StructType{Key: StructKey{Name: "usb_cdc_header"}, FldName: "usb_cdc"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "usb_cdc"},
 	}}},
 	{Key: StructKey{Name: "usb_port_status"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_port_status", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_port_status_flags", FldName: "wPortStatus", TypeSize: 2}}, Vals: []uint64{1, 2, 4, 8, 16, 32, 256, 512, 1024, 2048, 4096, 480, 512, 7168, 0, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352}},
@@ -25806,7 +26018,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumConfigurations", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bRESERVED", TypeSize: 1}}},
 	}}},
@@ -25839,11 +26051,24 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bmSublinkSpeedAttr", IsVarlen: true}, Type: &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_ssp_cap_sublink_speeds", TypeSize: 4}}, Vals: []uint64{15, 48, 192, 16128, 49152, 16711680}, BitMask: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, FldName: "lang_id"},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, FldName: "string"},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[array[int8]]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "lang_id", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]", TypeSize: 4}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "data", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[usb_cdc_ecm_mac]", TypeSize: 26}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mac"}, FldName: "data"},
+	}}},
 	{Key: StructKey{Name: "usb_wireless_cap_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_wireless_cap_descriptor", TypeSize: 11}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 16},
@@ -26937,7 +27162,7 @@
 	}}},
 	{Key: StructKey{Name: "vusb_connect_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_connect_string_descriptor", TypeSize: 8}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"str"}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_string_descriptor"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 4}, Type: &UnionType{Key: StructKey{Name: "usb_string_descriptor"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptor_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_generic", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_request_types", FldName: "req_type", TypeSize: 1}}, Vals: []uint64{0, 32, 64}, BitMask: true},
@@ -26979,7 +27204,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&StructType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+		&UnionType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]", TypeSize: 32}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptors"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors", TypeSize: 24}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -26989,6 +27220,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_hs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_HUB, usb_hub_descriptor_hs]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_ss", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_SS_HUB, usb_hub_descriptor_ss]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ecm", TypeSize: 12}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ncm", TypeSize: 12}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_hid", TypeSize: 20}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
@@ -27007,18 +27248,18 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]", TypeSize: 7}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
-	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]", TypeSize: 7}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
-	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 129},
@@ -27067,6 +27308,30 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 137},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 135},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 131},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]", TypeSize: 10}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 133},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "data", TypeSize: 4}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]", TypeSize: 34}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 128},
@@ -27163,7 +27428,7 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 92}, Fields: []Type{
+	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 88}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "get_interface", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
@@ -27175,7 +27440,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "audio_UAC_GET_MEM", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_MEM, array[int8, 3]]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_hub", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_hub_status]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_port", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_port_status]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "cdc_USB_CDC_GET_NTB_PARAMETERS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_MII_REG", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_MII_REG, int16]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_STATMNGSTS_REG", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_STATMNGSTS_REG, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_EEPROM", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_EEPROM, array[int8, 2]]"}}},
@@ -27188,13 +27452,30 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_GPIOS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_GPIOS, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_SW_PHY_STATUS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_SW_PHY_STATUS, int8]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ecm", TypeSize: 16}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ncm", TypeSize: 36}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_PARAMETERS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_INPUT_SIZE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_FORMAT", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_MAX_DATAGRAM_SIZE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_CRC_MODE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_responses_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_hid", TypeSize: 24}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_REPORT", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_responses_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_printer", TypeSize: 28}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -39241,6 +39522,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 4}}, Path: []string{"buf"}},
 	}},
+	{NR: 3, Name: "read$char_usb", CallName: "read", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 4}}, Path: []string{"buf"}},
+	}},
 	{NR: 3, Name: "read$eventfd", CallName: "read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_event", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "val", TypeSize: 4}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", TypeSize: 8, ArgDir: 1}}}},
@@ -43089,6 +43375,11 @@
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "id", TypeSize: 4}}, ValuesPerProc: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}, Val: 2},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_open_dev$char_usb", CallName: "syz_open_dev", Args: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "dev", TypeSize: 4}}, Val: 12},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "major", TypeSize: 4}}, Val: 180},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "minor", TypeSize: 4}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_open_dev$dmmidi", CallName: "syz_open_dev", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 13}, Kind: 2, Values: []string{"/dev/dmmidi#\x00"}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "id", TypeSize: 4}}},
@@ -43297,6 +43588,18 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ecm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 4}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 4}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ncm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 4}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 4}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_usb_connect$hid", CallName: "syz_usb_connect", Args: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 4}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 4}}, Path: []string{"dev"}},
@@ -43314,6 +43617,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_responses"}}},
 	}},
+	{Name: "syz_usb_control_io$cdc_ecm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ecm"}}},
+	}},
+	{Name: "syz_usb_control_io$cdc_ncm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ncm"}}},
+	}},
 	{Name: "syz_usb_control_io$hid", CallName: "syz_usb_control_io", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_hid", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_hid"}}},
@@ -44215,6 +44528,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 9}, Kind: 2, Values: []string{"threaded\x00"}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"buf"}},
 	}},
+	{NR: 4, Name: "write$char_usb", CallName: "write", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 4}}, Path: []string{"buf"}},
+	}},
 	{NR: 4, Name: "write$evdev", CallName: "write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_evdev", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "data", TypeSize: 4}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "input_event"}}}},
@@ -44946,6 +45264,8 @@
 	{Name: "CAPI_SELECT_B_PROTOCOL", Value: 65},
 	{Name: "CAPI_SET_FLAGS", Value: 2147762980},
 	{Name: "CAP_LAST_CAP", Value: 37},
+	{Name: "CDC_NCM_COMM_ALTSETTING_NCM"},
+	{Name: "CDC_NCM_DATA_ALTSETTING_NCM", Value: 1},
 	{Name: "CDO_AUTO_CLOSE", Value: 1},
 	{Name: "CDO_AUTO_EJECT", Value: 2},
 	{Name: "CDO_CHECK_TYPE", Value: 16},
@@ -46010,6 +46330,7 @@
 	{Name: "HID_REPORT_ID_UNKNOWN", Value: 4294967295},
 	{Name: "HID_REPORT_TYPE_MAX", Value: 3},
 	{Name: "HID_REPORT_TYPE_MIN", Value: 1},
+	{Name: "HID_REQ_GET_PROTOCOL", Value: 3},
 	{Name: "HID_REQ_GET_REPORT", Value: 1},
 	{Name: "HUB_CHANGE_LOCAL_POWER", Value: 1},
 	{Name: "HUB_CHANGE_OVERCURRENT", Value: 2},
@@ -50316,6 +50637,10 @@
 	{Name: "USB_CDC_COUNTRY_TYPE", Value: 7},
 	{Name: "USB_CDC_DMM_TYPE", Value: 20},
 	{Name: "USB_CDC_ETHERNET_TYPE", Value: 15},
+	{Name: "USB_CDC_GET_CRC_MODE", Value: 137},
+	{Name: "USB_CDC_GET_MAX_DATAGRAM_SIZE", Value: 135},
+	{Name: "USB_CDC_GET_NTB_FORMAT", Value: 131},
+	{Name: "USB_CDC_GET_NTB_INPUT_SIZE", Value: 133},
 	{Name: "USB_CDC_GET_NTB_PARAMETERS", Value: 128},
 	{Name: "USB_CDC_HEADER_TYPE"},
 	{Name: "USB_CDC_MBIM_EXTENDED_TYPE", Value: 28},
@@ -50325,8 +50650,11 @@
 	{Name: "USB_CDC_NCM_TYPE", Value: 26},
 	{Name: "USB_CDC_NETWORK_TERMINAL_TYPE", Value: 10},
 	{Name: "USB_CDC_OBEX_TYPE", Value: 21},
+	{Name: "USB_CDC_PROTO_NONE"},
+	{Name: "USB_CDC_SUBCLASS_ETHERNET", Value: 6},
+	{Name: "USB_CDC_SUBCLASS_NCM", Value: 13},
 	{Name: "USB_CDC_UNION_TYPE", Value: 6},
-	{Name: "USB_CDC_WHCM_TYPE", Value: 17},
+	{Name: "USB_CLASS_COMM", Value: 2},
 	{Name: "USB_CLASS_HID", Value: 3},
 	{Name: "USB_CLASS_PRINTER", Value: 7},
 	{Name: "USB_CONFIG_ATT_BATTERY", Value: 16},
@@ -50366,6 +50694,11 @@
 	{Name: "USB_DT_STRING", Value: 3},
 	{Name: "USB_DT_WIRELESS_ENDPOINT_COMP", Value: 17},
 	{Name: "USB_DT_WIRE_ADAPTER", Value: 33},
+	{Name: "USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES", Value: 2},
+	{Name: "USB_ENDPOINT_CDC_ECM_IN_ADDRESS", Value: 130},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS", Value: 129},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES", Value: 3},
+	{Name: "USB_ENDPOINT_CDC_ECM_OUT_ADDRESS", Value: 3},
 	{Name: "USB_ENDPOINT_HID_ATTRIBUTES", Value: 3},
 	{Name: "USB_ENDPOINT_HID_IN_ADDRESS", Value: 129},
 	{Name: "USB_ENDPOINT_HID_OUT_ADDRESS", Value: 2},
@@ -50397,6 +50730,7 @@
 	{Name: "USB_LOW_SPEED_OPERATION", Value: 1},
 	{Name: "USB_LPM_SUPPORT", Value: 2},
 	{Name: "USB_LTM_SUPPORT", Value: 2},
+	{Name: "USB_MAJOR", Value: 180},
 	{Name: "USB_PORT_STAT_CONNECTION", Value: 1},
 	{Name: "USB_PORT_STAT_C_BH_RESET", Value: 32},
 	{Name: "USB_PORT_STAT_C_CONFIG_ERROR", Value: 128},
@@ -52223,4 +52557,4 @@
 	{Name: "bpf_insn_load_imm_dw", Value: 24},
 }
 
-const revision_386 = "eb22b8a389910e3ec878475738f280bd61b00a09"
+const revision_386 = "6c600dc9e424904f3bf19b9e8ade5a7d397827a9"
diff --git a/sys/linux/gen/amd64.go b/sys/linux/gen/amd64.go
index 8db199c..00ec52f 100644
--- a/sys/linux/gen/amd64.go
+++ b/sys/linux/gen/amd64.go
@@ -40,6 +40,7 @@
 	{Name: "fd_cgroup_pid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_pid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_subtree", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_subtree"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_type", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_type"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_char_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_char_usb"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dir", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dir"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_dma_buf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dma_buf"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dmabuf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dmabuf"}, Values: []uint64{18446744073709551615}},
@@ -112,6 +113,8 @@
 	{Name: "fd_uhid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uhid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_uinput", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uinput"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ecm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ecm"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ncm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ncm"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_hid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_hid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_printer", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_printer"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usbmon", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_usbmon"}, Values: []uint64{18446744073709551615}},
@@ -25714,11 +25717,12 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 2},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_acm_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2, 4, 8}, BitMask: true},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 4}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDataInterface", TypeSize: 1}}},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_country_functional_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25735,40 +25739,42 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxCommand", TypeSize: 2}}},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mac"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mac", TypeSize: 24}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data0", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data1", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data2", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mbm_guid", TypeSize: 16}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id0", TypeSize: 8}}, Val: 94397490813999011},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id1", TypeSize: 8}}, Val: 3042602437899716518},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_ether_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ether_desc", TypeSize: 13}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 15},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iMACAddress", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iMACAddress", TypeSize: 1}}, Val: 1},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "bmEthernetStatistics", TypeSize: 4}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxSegmentSize", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wNumberMCFilters", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumberPowerFilters", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_generic", IsVarlen: true}, Fields: []Type{
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_types", FldName: "bDescriptorSubType", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 6, 7, 10, 15, 17, 18, 19, 20, 21, 26, 27, 28}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "usb_cdc_header"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header", IsVarlen: true}, Fields: []Type{
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "items", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_item"}}, Kind: 1, RangeEnd: 16},
-	}}},
 	{Key: StructKey{Name: "usb_cdc_header_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_desc", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdCDC", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_header_item"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_item", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_cdc_generic"}, FldName: "generic"},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet_other", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
 		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
-		&StructType{Key: StructKey{Name: "usb_cdc_union_desc"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
 		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
-		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
 		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
@@ -25777,6 +25783,25 @@
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, FldName: "union"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ncm_desc"}, FldName: "ncm"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ncm_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm_other", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
+		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
+		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
+		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
+		&StructType{Key: StructKey{Name: "usb_cdc_obex_desc"}, FldName: "obex"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_mbim_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mbim_desc", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
@@ -25801,7 +25826,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 18},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bGUID", TypeSize: 16}, Kind: 1, RangeBegin: 16, RangeEnd: 16},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, FldName: "bGUID"},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mdlm_detail_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25846,24 +25871,60 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 21},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_union_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 0]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMasterInterface0", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 1]", IsVarlen: true}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}, Val: 1},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumInterfaces", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, FldName: "interfaces"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumInterfaces", TypeSize: 1}}, Path: []string{"interfaces"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25874,7 +25935,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25885,7 +25946,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25894,7 +25955,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 4},
 	}}},
 	{Key: StructKey{Name: "usb_dev_cap"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_dev_cap", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_cap_descriptor"}, FldName: "generic"},
@@ -25908,11 +25969,17 @@
 	{Key: StructKey{Name: "usb_device_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 64, array[usb_config_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
@@ -25921,13 +25988,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
@@ -25938,36 +26005,79 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1008},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 27671},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42152},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[flags[usb_endpoint_addresses, int8], flags[usb_endpoint_attributes, int8], array[usb_endpoint_extra_descriptor, 0:2]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_in", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_notify", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_out", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_hid_in", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
@@ -25980,12 +26090,45 @@
 	{Key: StructKey{Name: "usb_endpoint_descriptor_printer_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_printer_out", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_PRINTER_OUT_ADDRESS, int8], const[USB_ENDPOINT_PRINTER_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25996,7 +26139,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 2},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -26007,7 +26150,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -26018,7 +26161,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 1},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -26029,12 +26172,21 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_addresses", FldName: "bEndpointAddress", TypeSize: 1}}, Vals: []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 128}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 3, 0, 16, 0, 4, 8, 12, 0, 16, 16}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_endpoint_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "notify", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}}, Kind: 1, RangeEnd: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ncm_data", TypeSize: 18}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, FldName: "in"},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "out", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_out"}}, Kind: 1, RangeEnd: 1},
@@ -26104,15 +26256,70 @@
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hub_change_flags", FldName: "wHubChange", TypeSize: 2}}, Vals: []uint64{1, 2}, BitMask: true},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ncm"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 2, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
@@ -26125,36 +26332,41 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_interface_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "endpoints", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor"}}, Kind: 1, RangeEnd: 16},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
-		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
-	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "endpoints"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]", TypeSize: 27}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptors_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, FldName: "control"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, FldName: "data_nop"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_extra_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_extra_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_descriptor"}, FldName: "generic"},
 		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "hid_hid"},
-		&StructType{Key: StructKey{Name: "usb_cdc_header"}, FldName: "usb_cdc"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "usb_cdc"},
 	}}},
 	{Key: StructKey{Name: "usb_port_status"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_port_status", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_port_status_flags", FldName: "wPortStatus", TypeSize: 2}}, Vals: []uint64{1, 2, 4, 8, 16, 32, 256, 512, 1024, 2048, 4096, 480, 512, 7168, 0, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352}},
@@ -26177,7 +26389,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumConfigurations", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bRESERVED", TypeSize: 1}}},
 	}}},
@@ -26210,11 +26422,24 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bmSublinkSpeedAttr", IsVarlen: true}, Type: &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_ssp_cap_sublink_speeds", TypeSize: 4}}, Vals: []uint64{15, 48, 192, 16128, 49152, 16711680}, BitMask: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, FldName: "lang_id"},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, FldName: "string"},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[array[int8]]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "lang_id", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]", TypeSize: 4}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "data", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[usb_cdc_ecm_mac]", TypeSize: 26}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mac"}, FldName: "data"},
+	}}},
 	{Key: StructKey{Name: "usb_wireless_cap_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_wireless_cap_descriptor", TypeSize: 11}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 16},
@@ -27315,7 +27540,7 @@
 	}}},
 	{Key: StructKey{Name: "vusb_connect_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_connect_string_descriptor", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"str"}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_string_descriptor"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 8}, Type: &UnionType{Key: StructKey{Name: "usb_string_descriptor"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptor_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_generic", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_request_types", FldName: "req_type", TypeSize: 1}}, Vals: []uint64{0, 32, 64}, BitMask: true},
@@ -27357,7 +27582,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&StructType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+		&UnionType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]", TypeSize: 32}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptors"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors", TypeSize: 44}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -27367,6 +27598,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_hs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_HUB, usb_hub_descriptor_hs]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_ss", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_SS_HUB, usb_hub_descriptor_ss]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ecm", TypeSize: 20}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ncm", TypeSize: 20}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_hid", TypeSize: 36}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
@@ -27385,18 +27626,18 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]", TypeSize: 7}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
-	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]", TypeSize: 7}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
-	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 129},
@@ -27445,6 +27686,30 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 137},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 135},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 131},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]", TypeSize: 10}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 133},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "data", TypeSize: 4}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]", TypeSize: 34}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 128},
@@ -27541,7 +27806,7 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 180}, Fields: []Type{
+	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 172}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "get_interface", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
@@ -27553,7 +27818,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "audio_UAC_GET_MEM", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_MEM, array[int8, 3]]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_hub", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_hub_status]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_port", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_port_status]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "cdc_USB_CDC_GET_NTB_PARAMETERS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_MII_REG", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_MII_REG, int16]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_STATMNGSTS_REG", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_STATMNGSTS_REG, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_EEPROM", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_EEPROM, array[int8, 2]]"}}},
@@ -27566,13 +27830,30 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_GPIOS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_GPIOS, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_SW_PHY_STATUS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_SW_PHY_STATUS, int8]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ecm", TypeSize: 28}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ncm", TypeSize: 68}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_PARAMETERS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_INPUT_SIZE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_FORMAT", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_MAX_DATAGRAM_SIZE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_CRC_MODE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_responses_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_hid", TypeSize: 44}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_REPORT", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_responses_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_printer", TypeSize: 52}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -39758,6 +40039,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buf"}},
 	}},
+	{Name: "read$char_usb", CallName: "read", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Path: []string{"buf"}},
+	}},
 	{Name: "read$eventfd", CallName: "read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_event", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "val", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", TypeSize: 8, ArgDir: 1}}}},
@@ -43611,6 +43897,11 @@
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "id", TypeSize: 8}}, ValuesPerProc: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 8}}, Val: 2},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_open_dev$char_usb", CallName: "syz_open_dev", Args: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "dev", TypeSize: 8}}, Val: 12},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "major", TypeSize: 8}}, Val: 180},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "minor", TypeSize: 8}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_open_dev$dmmidi", CallName: "syz_open_dev", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 13}, Kind: 2, Values: []string{"/dev/dmmidi#\x00"}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "id", TypeSize: 8}}},
@@ -43819,6 +44110,18 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ecm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ncm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_usb_connect$hid", CallName: "syz_usb_connect", Args: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
@@ -43836,6 +44139,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses"}}},
 	}},
+	{Name: "syz_usb_control_io$cdc_ecm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ecm"}}},
+	}},
+	{Name: "syz_usb_control_io$cdc_ncm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ncm"}}},
+	}},
 	{Name: "syz_usb_control_io$hid", CallName: "syz_usb_control_io", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_hid", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_hid"}}},
@@ -44737,6 +45050,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 9}, Kind: 2, Values: []string{"threaded\x00"}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 8}}, BitSize: 8, Path: []string{"buf"}},
 	}},
+	{NR: 1, Name: "write$char_usb", CallName: "write", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Path: []string{"buf"}},
+	}},
 	{NR: 1, Name: "write$evdev", CallName: "write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_evdev", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "data", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "input_event"}}}},
@@ -45468,6 +45786,8 @@
 	{Name: "CAPI_SELECT_B_PROTOCOL", Value: 65},
 	{Name: "CAPI_SET_FLAGS", Value: 2147762980},
 	{Name: "CAP_LAST_CAP", Value: 37},
+	{Name: "CDC_NCM_COMM_ALTSETTING_NCM"},
+	{Name: "CDC_NCM_DATA_ALTSETTING_NCM", Value: 1},
 	{Name: "CDO_AUTO_CLOSE", Value: 1},
 	{Name: "CDO_AUTO_EJECT", Value: 2},
 	{Name: "CDO_CHECK_TYPE", Value: 16},
@@ -46532,6 +46852,7 @@
 	{Name: "HID_REPORT_ID_UNKNOWN", Value: 4294967295},
 	{Name: "HID_REPORT_TYPE_MAX", Value: 3},
 	{Name: "HID_REPORT_TYPE_MIN", Value: 1},
+	{Name: "HID_REQ_GET_PROTOCOL", Value: 3},
 	{Name: "HID_REQ_GET_REPORT", Value: 1},
 	{Name: "HUB_CHANGE_LOCAL_POWER", Value: 1},
 	{Name: "HUB_CHANGE_OVERCURRENT", Value: 2},
@@ -50852,6 +51173,10 @@
 	{Name: "USB_CDC_COUNTRY_TYPE", Value: 7},
 	{Name: "USB_CDC_DMM_TYPE", Value: 20},
 	{Name: "USB_CDC_ETHERNET_TYPE", Value: 15},
+	{Name: "USB_CDC_GET_CRC_MODE", Value: 137},
+	{Name: "USB_CDC_GET_MAX_DATAGRAM_SIZE", Value: 135},
+	{Name: "USB_CDC_GET_NTB_FORMAT", Value: 131},
+	{Name: "USB_CDC_GET_NTB_INPUT_SIZE", Value: 133},
 	{Name: "USB_CDC_GET_NTB_PARAMETERS", Value: 128},
 	{Name: "USB_CDC_HEADER_TYPE"},
 	{Name: "USB_CDC_MBIM_EXTENDED_TYPE", Value: 28},
@@ -50861,8 +51186,11 @@
 	{Name: "USB_CDC_NCM_TYPE", Value: 26},
 	{Name: "USB_CDC_NETWORK_TERMINAL_TYPE", Value: 10},
 	{Name: "USB_CDC_OBEX_TYPE", Value: 21},
+	{Name: "USB_CDC_PROTO_NONE"},
+	{Name: "USB_CDC_SUBCLASS_ETHERNET", Value: 6},
+	{Name: "USB_CDC_SUBCLASS_NCM", Value: 13},
 	{Name: "USB_CDC_UNION_TYPE", Value: 6},
-	{Name: "USB_CDC_WHCM_TYPE", Value: 17},
+	{Name: "USB_CLASS_COMM", Value: 2},
 	{Name: "USB_CLASS_HID", Value: 3},
 	{Name: "USB_CLASS_PRINTER", Value: 7},
 	{Name: "USB_CONFIG_ATT_BATTERY", Value: 16},
@@ -50902,6 +51230,11 @@
 	{Name: "USB_DT_STRING", Value: 3},
 	{Name: "USB_DT_WIRELESS_ENDPOINT_COMP", Value: 17},
 	{Name: "USB_DT_WIRE_ADAPTER", Value: 33},
+	{Name: "USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES", Value: 2},
+	{Name: "USB_ENDPOINT_CDC_ECM_IN_ADDRESS", Value: 130},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS", Value: 129},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES", Value: 3},
+	{Name: "USB_ENDPOINT_CDC_ECM_OUT_ADDRESS", Value: 3},
 	{Name: "USB_ENDPOINT_HID_ATTRIBUTES", Value: 3},
 	{Name: "USB_ENDPOINT_HID_IN_ADDRESS", Value: 129},
 	{Name: "USB_ENDPOINT_HID_OUT_ADDRESS", Value: 2},
@@ -50933,6 +51266,7 @@
 	{Name: "USB_LOW_SPEED_OPERATION", Value: 1},
 	{Name: "USB_LPM_SUPPORT", Value: 2},
 	{Name: "USB_LTM_SUPPORT", Value: 2},
+	{Name: "USB_MAJOR", Value: 180},
 	{Name: "USB_PORT_STAT_CONNECTION", Value: 1},
 	{Name: "USB_PORT_STAT_C_BH_RESET", Value: 32},
 	{Name: "USB_PORT_STAT_C_CONFIG_ERROR", Value: 128},
@@ -52760,4 +53094,4 @@
 	{Name: "bpf_insn_load_imm_dw", Value: 24},
 }
 
-const revision_amd64 = "b025d70b7713cc48e9ab783fc35e2410b69a5736"
+const revision_amd64 = "e8d337b13b9ae8f911b772c9be47236bc8446da4"
diff --git a/sys/linux/gen/arm.go b/sys/linux/gen/arm.go
index 929a5af..fbbafa8 100644
--- a/sys/linux/gen/arm.go
+++ b/sys/linux/gen/arm.go
@@ -40,6 +40,7 @@
 	{Name: "fd_cgroup_pid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_pid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_subtree", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_subtree"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_type", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_type"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_char_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_char_usb"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dir", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dir"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_dma_buf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dma_buf"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dmabuf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dmabuf"}, Values: []uint64{18446744073709551615}},
@@ -112,6 +113,8 @@
 	{Name: "fd_uhid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uhid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_uinput", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uinput"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ecm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ecm"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ncm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ncm"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_hid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_hid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_printer", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_printer"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usbmon", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_usbmon"}, Values: []uint64{18446744073709551615}},
@@ -25165,11 +25168,12 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 2},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_acm_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2, 4, 8}, BitMask: true},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 4}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDataInterface", TypeSize: 1}}},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_country_functional_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25186,40 +25190,42 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxCommand", TypeSize: 2}}},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mac"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mac", TypeSize: 24}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data0", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data1", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data2", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mbm_guid", TypeSize: 16}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id0", TypeSize: 8}}, Val: 94397490813999011},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id1", TypeSize: 8}}, Val: 3042602437899716518},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_ether_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ether_desc", TypeSize: 13}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 15},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iMACAddress", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iMACAddress", TypeSize: 1}}, Val: 1},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "bmEthernetStatistics", TypeSize: 4}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxSegmentSize", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wNumberMCFilters", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumberPowerFilters", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_generic", IsVarlen: true}, Fields: []Type{
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_types", FldName: "bDescriptorSubType", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 6, 7, 10, 15, 17, 18, 19, 20, 21, 26, 27, 28}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "usb_cdc_header"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header", IsVarlen: true}, Fields: []Type{
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "items", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_item"}}, Kind: 1, RangeEnd: 16},
-	}}},
 	{Key: StructKey{Name: "usb_cdc_header_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_desc", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdCDC", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_header_item"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_item", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_cdc_generic"}, FldName: "generic"},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet_other", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
 		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
-		&StructType{Key: StructKey{Name: "usb_cdc_union_desc"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
 		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
-		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
 		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
@@ -25228,6 +25234,25 @@
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, FldName: "union"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ncm_desc"}, FldName: "ncm"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ncm_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm_other", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
+		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
+		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
+		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
+		&StructType{Key: StructKey{Name: "usb_cdc_obex_desc"}, FldName: "obex"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_mbim_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mbim_desc", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
@@ -25252,7 +25277,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 18},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bGUID", TypeSize: 16}, Kind: 1, RangeBegin: 16, RangeEnd: 16},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, FldName: "bGUID"},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mdlm_detail_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25297,24 +25322,60 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 21},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_union_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 0]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMasterInterface0", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 1]", IsVarlen: true}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}, Val: 1},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumInterfaces", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, FldName: "interfaces"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumInterfaces", TypeSize: 1}}, Path: []string{"interfaces"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25325,7 +25386,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25336,7 +25397,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25345,7 +25406,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 4},
 	}}},
 	{Key: StructKey{Name: "usb_dev_cap"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_dev_cap", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_cap_descriptor"}, FldName: "generic"},
@@ -25359,11 +25420,17 @@
 	{Key: StructKey{Name: "usb_device_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 64, array[usb_config_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
@@ -25372,13 +25439,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
@@ -25389,36 +25456,79 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1008},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 27671},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42152},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[flags[usb_endpoint_addresses, int8], flags[usb_endpoint_attributes, int8], array[usb_endpoint_extra_descriptor, 0:2]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_in", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_notify", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_out", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_hid_in", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
@@ -25431,12 +25541,45 @@
 	{Key: StructKey{Name: "usb_endpoint_descriptor_printer_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_printer_out", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_PRINTER_OUT_ADDRESS, int8], const[USB_ENDPOINT_PRINTER_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25447,7 +25590,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 2},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25458,7 +25601,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25469,7 +25612,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 1},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25480,12 +25623,21 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_addresses", FldName: "bEndpointAddress", TypeSize: 1}}, Vals: []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 128}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 3, 0, 16, 0, 4, 8, 12, 0, 16, 16}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_endpoint_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "notify", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}}, Kind: 1, RangeEnd: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ncm_data", TypeSize: 18}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, FldName: "in"},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "out", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_out"}}, Kind: 1, RangeEnd: 1},
@@ -25555,15 +25707,70 @@
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hub_change_flags", FldName: "wHubChange", TypeSize: 2}}, Vals: []uint64{1, 2}, BitMask: true},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ncm"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 2, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
@@ -25576,36 +25783,41 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_interface_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "endpoints", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor"}}, Kind: 1, RangeEnd: 16},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
-		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
-	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "endpoints"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]", TypeSize: 27}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptors_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, FldName: "control"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, FldName: "data_nop"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_extra_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_extra_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_descriptor"}, FldName: "generic"},
 		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "hid_hid"},
-		&StructType{Key: StructKey{Name: "usb_cdc_header"}, FldName: "usb_cdc"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "usb_cdc"},
 	}}},
 	{Key: StructKey{Name: "usb_port_status"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_port_status", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_port_status_flags", FldName: "wPortStatus", TypeSize: 2}}, Vals: []uint64{1, 2, 4, 8, 16, 32, 256, 512, 1024, 2048, 4096, 480, 512, 7168, 0, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352}},
@@ -25628,7 +25840,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumConfigurations", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bRESERVED", TypeSize: 1}}},
 	}}},
@@ -25661,11 +25873,24 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bmSublinkSpeedAttr", IsVarlen: true}, Type: &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_ssp_cap_sublink_speeds", TypeSize: 4}}, Vals: []uint64{15, 48, 192, 16128, 49152, 16711680}, BitMask: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, FldName: "lang_id"},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, FldName: "string"},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[array[int8]]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "lang_id", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]", TypeSize: 4}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "data", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[usb_cdc_ecm_mac]", TypeSize: 26}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mac"}, FldName: "data"},
+	}}},
 	{Key: StructKey{Name: "usb_wireless_cap_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_wireless_cap_descriptor", TypeSize: 11}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 16},
@@ -26743,7 +26968,7 @@
 	}}},
 	{Key: StructKey{Name: "vusb_connect_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_connect_string_descriptor", TypeSize: 8}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"str"}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_string_descriptor"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 4}, Type: &UnionType{Key: StructKey{Name: "usb_string_descriptor"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptor_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_generic", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_request_types", FldName: "req_type", TypeSize: 1}}, Vals: []uint64{0, 32, 64}, BitMask: true},
@@ -26785,7 +27010,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&StructType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+		&UnionType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]", TypeSize: 32}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptors"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors", TypeSize: 24}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -26795,6 +27026,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_hs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_HUB, usb_hub_descriptor_hs]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_ss", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_SS_HUB, usb_hub_descriptor_ss]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ecm", TypeSize: 12}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ncm", TypeSize: 12}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_hid", TypeSize: 20}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
@@ -26813,18 +27054,18 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]", TypeSize: 7}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
-	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]", TypeSize: 7}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
-	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 129},
@@ -26873,6 +27114,30 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 137},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 135},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 131},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]", TypeSize: 10}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 133},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "data", TypeSize: 4}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]", TypeSize: 34}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 128},
@@ -26969,7 +27234,7 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 92}, Fields: []Type{
+	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 88}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "get_interface", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
@@ -26981,7 +27246,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "audio_UAC_GET_MEM", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_MEM, array[int8, 3]]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_hub", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_hub_status]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_port", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_port_status]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "cdc_USB_CDC_GET_NTB_PARAMETERS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_MII_REG", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_MII_REG, int16]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_STATMNGSTS_REG", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_STATMNGSTS_REG, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_EEPROM", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_EEPROM, array[int8, 2]]"}}},
@@ -26994,13 +27258,30 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_GPIOS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_GPIOS, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_SW_PHY_STATUS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_SW_PHY_STATUS, int8]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ecm", TypeSize: 16}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ncm", TypeSize: 36}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_PARAMETERS", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_INPUT_SIZE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_FORMAT", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_MAX_DATAGRAM_SIZE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_CRC_MODE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_responses_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_hid", TypeSize: 24}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_REPORT", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_responses_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_printer", TypeSize: 28}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -38902,6 +39183,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 4}}, Path: []string{"buf"}},
 	}},
+	{NR: 3, Name: "read$char_usb", CallName: "read", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 4}}, Path: []string{"buf"}},
+	}},
 	{NR: 3, Name: "read$eventfd", CallName: "read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_event", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "val", TypeSize: 4}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", TypeSize: 8, ArgDir: 1}}}},
@@ -42745,6 +43031,11 @@
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "id", TypeSize: 4}}, ValuesPerProc: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 4}}, Val: 2},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_open_dev$char_usb", CallName: "syz_open_dev", Args: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "dev", TypeSize: 4}}, Val: 12},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "major", TypeSize: 4}}, Val: 180},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "minor", TypeSize: 4}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_open_dev$dmmidi", CallName: "syz_open_dev", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 13}, Kind: 2, Values: []string{"/dev/dmmidi#\x00"}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "id", TypeSize: 4}}},
@@ -42953,6 +43244,18 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ecm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 4}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 4}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ncm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 4}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 4}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_usb_connect$hid", CallName: "syz_usb_connect", Args: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 4}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 4}}, Path: []string{"dev"}},
@@ -42970,6 +43273,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_responses"}}},
 	}},
+	{Name: "syz_usb_control_io$cdc_ecm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ecm"}}},
+	}},
+	{Name: "syz_usb_control_io$cdc_ncm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ncm"}}},
+	}},
 	{Name: "syz_usb_control_io$hid", CallName: "syz_usb_control_io", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_hid", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 4}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_hid"}}},
@@ -43864,6 +44177,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 9}, Kind: 2, Values: []string{"threaded\x00"}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"buf"}},
 	}},
+	{NR: 4, Name: "write$char_usb", CallName: "write", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 4}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 4}}, Path: []string{"buf"}},
+	}},
 	{NR: 4, Name: "write$evdev", CallName: "write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_evdev", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "data", TypeSize: 4}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "input_event"}}}},
@@ -44586,6 +44904,8 @@
 	{Name: "CAPI_SELECT_B_PROTOCOL", Value: 65},
 	{Name: "CAPI_SET_FLAGS", Value: 2147762980},
 	{Name: "CAP_LAST_CAP", Value: 37},
+	{Name: "CDC_NCM_COMM_ALTSETTING_NCM"},
+	{Name: "CDC_NCM_DATA_ALTSETTING_NCM", Value: 1},
 	{Name: "CDO_AUTO_CLOSE", Value: 1},
 	{Name: "CDO_AUTO_EJECT", Value: 2},
 	{Name: "CDO_CHECK_TYPE", Value: 16},
@@ -45650,6 +45970,7 @@
 	{Name: "HID_REPORT_ID_UNKNOWN", Value: 4294967295},
 	{Name: "HID_REPORT_TYPE_MAX", Value: 3},
 	{Name: "HID_REPORT_TYPE_MIN", Value: 1},
+	{Name: "HID_REQ_GET_PROTOCOL", Value: 3},
 	{Name: "HID_REQ_GET_REPORT", Value: 1},
 	{Name: "HUB_CHANGE_LOCAL_POWER", Value: 1},
 	{Name: "HUB_CHANGE_OVERCURRENT", Value: 2},
@@ -49903,6 +50224,10 @@
 	{Name: "USB_CDC_COUNTRY_TYPE", Value: 7},
 	{Name: "USB_CDC_DMM_TYPE", Value: 20},
 	{Name: "USB_CDC_ETHERNET_TYPE", Value: 15},
+	{Name: "USB_CDC_GET_CRC_MODE", Value: 137},
+	{Name: "USB_CDC_GET_MAX_DATAGRAM_SIZE", Value: 135},
+	{Name: "USB_CDC_GET_NTB_FORMAT", Value: 131},
+	{Name: "USB_CDC_GET_NTB_INPUT_SIZE", Value: 133},
 	{Name: "USB_CDC_GET_NTB_PARAMETERS", Value: 128},
 	{Name: "USB_CDC_HEADER_TYPE"},
 	{Name: "USB_CDC_MBIM_EXTENDED_TYPE", Value: 28},
@@ -49912,8 +50237,11 @@
 	{Name: "USB_CDC_NCM_TYPE", Value: 26},
 	{Name: "USB_CDC_NETWORK_TERMINAL_TYPE", Value: 10},
 	{Name: "USB_CDC_OBEX_TYPE", Value: 21},
+	{Name: "USB_CDC_PROTO_NONE"},
+	{Name: "USB_CDC_SUBCLASS_ETHERNET", Value: 6},
+	{Name: "USB_CDC_SUBCLASS_NCM", Value: 13},
 	{Name: "USB_CDC_UNION_TYPE", Value: 6},
-	{Name: "USB_CDC_WHCM_TYPE", Value: 17},
+	{Name: "USB_CLASS_COMM", Value: 2},
 	{Name: "USB_CLASS_HID", Value: 3},
 	{Name: "USB_CLASS_PRINTER", Value: 7},
 	{Name: "USB_CONFIG_ATT_BATTERY", Value: 16},
@@ -49953,6 +50281,11 @@
 	{Name: "USB_DT_STRING", Value: 3},
 	{Name: "USB_DT_WIRELESS_ENDPOINT_COMP", Value: 17},
 	{Name: "USB_DT_WIRE_ADAPTER", Value: 33},
+	{Name: "USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES", Value: 2},
+	{Name: "USB_ENDPOINT_CDC_ECM_IN_ADDRESS", Value: 130},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS", Value: 129},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES", Value: 3},
+	{Name: "USB_ENDPOINT_CDC_ECM_OUT_ADDRESS", Value: 3},
 	{Name: "USB_ENDPOINT_HID_ATTRIBUTES", Value: 3},
 	{Name: "USB_ENDPOINT_HID_IN_ADDRESS", Value: 129},
 	{Name: "USB_ENDPOINT_HID_OUT_ADDRESS", Value: 2},
@@ -49984,6 +50317,7 @@
 	{Name: "USB_LOW_SPEED_OPERATION", Value: 1},
 	{Name: "USB_LPM_SUPPORT", Value: 2},
 	{Name: "USB_LTM_SUPPORT", Value: 2},
+	{Name: "USB_MAJOR", Value: 180},
 	{Name: "USB_PORT_STAT_CONNECTION", Value: 1},
 	{Name: "USB_PORT_STAT_C_BH_RESET", Value: 32},
 	{Name: "USB_PORT_STAT_C_CONFIG_ERROR", Value: 128},
@@ -51800,4 +52134,4 @@
 	{Name: "bpf_insn_load_imm_dw", Value: 24},
 }
 
-const revision_arm = "fdb9cb5b71481f79ff86d824721def50b72fafa5"
+const revision_arm = "c0010b3d05cb5d0ca1af17dacf9349c9cdf38c9e"
diff --git a/sys/linux/gen/arm64.go b/sys/linux/gen/arm64.go
index 9796420..f36e0ef 100644
--- a/sys/linux/gen/arm64.go
+++ b/sys/linux/gen/arm64.go
@@ -40,6 +40,7 @@
 	{Name: "fd_cgroup_pid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_pid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_subtree", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_subtree"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_type", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_type"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_char_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_char_usb"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dir", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dir"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_dma_buf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dma_buf"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dmabuf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dmabuf"}, Values: []uint64{18446744073709551615}},
@@ -112,6 +113,8 @@
 	{Name: "fd_uhid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uhid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_uinput", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uinput"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ecm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ecm"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ncm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ncm"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_hid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_hid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_printer", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_printer"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usbmon", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_usbmon"}, Values: []uint64{18446744073709551615}},
@@ -25531,11 +25534,12 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 2},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_acm_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2, 4, 8}, BitMask: true},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 4}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDataInterface", TypeSize: 1}}},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_country_functional_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25552,40 +25556,42 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxCommand", TypeSize: 2}}},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mac"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mac", TypeSize: 24}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data0", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data1", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data2", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mbm_guid", TypeSize: 16}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id0", TypeSize: 8}}, Val: 94397490813999011},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id1", TypeSize: 8}}, Val: 3042602437899716518},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_ether_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ether_desc", TypeSize: 13}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 15},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iMACAddress", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iMACAddress", TypeSize: 1}}, Val: 1},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "bmEthernetStatistics", TypeSize: 4}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxSegmentSize", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wNumberMCFilters", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumberPowerFilters", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_generic", IsVarlen: true}, Fields: []Type{
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_types", FldName: "bDescriptorSubType", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 6, 7, 10, 15, 17, 18, 19, 20, 21, 26, 27, 28}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "usb_cdc_header"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header", IsVarlen: true}, Fields: []Type{
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "items", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_item"}}, Kind: 1, RangeEnd: 16},
-	}}},
 	{Key: StructKey{Name: "usb_cdc_header_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_desc", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdCDC", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_header_item"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_item", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_cdc_generic"}, FldName: "generic"},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet_other", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
 		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
-		&StructType{Key: StructKey{Name: "usb_cdc_union_desc"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
 		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
-		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
 		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
@@ -25594,6 +25600,25 @@
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, FldName: "union"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ncm_desc"}, FldName: "ncm"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ncm_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm_other", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
+		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
+		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
+		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
+		&StructType{Key: StructKey{Name: "usb_cdc_obex_desc"}, FldName: "obex"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_mbim_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mbim_desc", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
@@ -25618,7 +25643,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 18},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bGUID", TypeSize: 16}, Kind: 1, RangeBegin: 16, RangeEnd: 16},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, FldName: "bGUID"},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mdlm_detail_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25663,24 +25688,60 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 21},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_union_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 0]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMasterInterface0", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 1]", IsVarlen: true}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}, Val: 1},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumInterfaces", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, FldName: "interfaces"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumInterfaces", TypeSize: 1}}, Path: []string{"interfaces"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25691,7 +25752,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25702,7 +25763,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25711,7 +25772,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 4},
 	}}},
 	{Key: StructKey{Name: "usb_dev_cap"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_dev_cap", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_cap_descriptor"}, FldName: "generic"},
@@ -25725,11 +25786,17 @@
 	{Key: StructKey{Name: "usb_device_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 64, array[usb_config_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
@@ -25738,13 +25805,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
@@ -25755,36 +25822,79 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1008},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 27671},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42152},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[flags[usb_endpoint_addresses, int8], flags[usb_endpoint_attributes, int8], array[usb_endpoint_extra_descriptor, 0:2]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_in", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_notify", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_out", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_hid_in", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
@@ -25797,12 +25907,45 @@
 	{Key: StructKey{Name: "usb_endpoint_descriptor_printer_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_printer_out", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_PRINTER_OUT_ADDRESS, int8], const[USB_ENDPOINT_PRINTER_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25813,7 +25956,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 2},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25824,7 +25967,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25835,7 +25978,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 1},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25846,12 +25989,21 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_addresses", FldName: "bEndpointAddress", TypeSize: 1}}, Vals: []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 128}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 3, 0, 16, 0, 4, 8, 12, 0, 16, 16}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_endpoint_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "notify", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}}, Kind: 1, RangeEnd: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ncm_data", TypeSize: 18}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, FldName: "in"},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "out", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_out"}}, Kind: 1, RangeEnd: 1},
@@ -25921,15 +26073,70 @@
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hub_change_flags", FldName: "wHubChange", TypeSize: 2}}, Vals: []uint64{1, 2}, BitMask: true},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ncm"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 2, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
@@ -25942,36 +26149,41 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_interface_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "endpoints", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor"}}, Kind: 1, RangeEnd: 16},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
-		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
-	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "endpoints"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]", TypeSize: 27}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptors_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, FldName: "control"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, FldName: "data_nop"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_extra_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_extra_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_descriptor"}, FldName: "generic"},
 		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "hid_hid"},
-		&StructType{Key: StructKey{Name: "usb_cdc_header"}, FldName: "usb_cdc"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "usb_cdc"},
 	}}},
 	{Key: StructKey{Name: "usb_port_status"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_port_status", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_port_status_flags", FldName: "wPortStatus", TypeSize: 2}}, Vals: []uint64{1, 2, 4, 8, 16, 32, 256, 512, 1024, 2048, 4096, 480, 512, 7168, 0, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352}},
@@ -25994,7 +26206,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumConfigurations", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bRESERVED", TypeSize: 1}}},
 	}}},
@@ -26027,11 +26239,24 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bmSublinkSpeedAttr", IsVarlen: true}, Type: &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_ssp_cap_sublink_speeds", TypeSize: 4}}, Vals: []uint64{15, 48, 192, 16128, 49152, 16711680}, BitMask: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, FldName: "lang_id"},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, FldName: "string"},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[array[int8]]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "lang_id", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]", TypeSize: 4}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "data", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[usb_cdc_ecm_mac]", TypeSize: 26}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mac"}, FldName: "data"},
+	}}},
 	{Key: StructKey{Name: "usb_wireless_cap_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_wireless_cap_descriptor", TypeSize: 11}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 16},
@@ -27107,7 +27332,7 @@
 	}}},
 	{Key: StructKey{Name: "vusb_connect_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_connect_string_descriptor", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"str"}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_string_descriptor"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 8}, Type: &UnionType{Key: StructKey{Name: "usb_string_descriptor"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptor_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_generic", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_request_types", FldName: "req_type", TypeSize: 1}}, Vals: []uint64{0, 32, 64}, BitMask: true},
@@ -27149,7 +27374,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&StructType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+		&UnionType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]", TypeSize: 32}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptors"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors", TypeSize: 44}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -27159,6 +27390,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_hs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_HUB, usb_hub_descriptor_hs]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_ss", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_SS_HUB, usb_hub_descriptor_ss]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ecm", TypeSize: 20}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ncm", TypeSize: 20}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_hid", TypeSize: 36}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
@@ -27177,18 +27418,18 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]", TypeSize: 7}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
-	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]", TypeSize: 7}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
-	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 129},
@@ -27237,6 +27478,30 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 137},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 135},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 131},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]", TypeSize: 10}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 133},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "data", TypeSize: 4}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]", TypeSize: 34}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 128},
@@ -27333,7 +27598,7 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 180}, Fields: []Type{
+	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 172}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "get_interface", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
@@ -27345,7 +27610,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "audio_UAC_GET_MEM", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_MEM, array[int8, 3]]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_hub", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_hub_status]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_port", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_port_status]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "cdc_USB_CDC_GET_NTB_PARAMETERS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_MII_REG", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_MII_REG, int16]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_STATMNGSTS_REG", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_STATMNGSTS_REG, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_EEPROM", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_EEPROM, array[int8, 2]]"}}},
@@ -27358,13 +27622,30 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_GPIOS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_GPIOS, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_SW_PHY_STATUS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_SW_PHY_STATUS, int8]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ecm", TypeSize: 28}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ncm", TypeSize: 68}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_PARAMETERS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_INPUT_SIZE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_FORMAT", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_MAX_DATAGRAM_SIZE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_CRC_MODE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_responses_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_hid", TypeSize: 44}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_REPORT", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_responses_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_printer", TypeSize: 52}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -39281,6 +39562,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buf"}},
 	}},
+	{NR: 63, Name: "read$char_usb", CallName: "read", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Path: []string{"buf"}},
+	}},
 	{NR: 63, Name: "read$eventfd", CallName: "read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_event", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "val", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", TypeSize: 8, ArgDir: 1}}}},
@@ -43087,6 +43373,11 @@
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "id", TypeSize: 8}}, ValuesPerProc: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 8}}, Val: 2},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_open_dev$char_usb", CallName: "syz_open_dev", Args: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "dev", TypeSize: 8}}, Val: 12},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "major", TypeSize: 8}}, Val: 180},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "minor", TypeSize: 8}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_open_dev$dmmidi", CallName: "syz_open_dev", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 13}, Kind: 2, Values: []string{"/dev/dmmidi#\x00"}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "id", TypeSize: 8}}},
@@ -43295,6 +43586,18 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ecm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ncm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_usb_connect$hid", CallName: "syz_usb_connect", Args: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
@@ -43312,6 +43615,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses"}}},
 	}},
+	{Name: "syz_usb_control_io$cdc_ecm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ecm"}}},
+	}},
+	{Name: "syz_usb_control_io$cdc_ncm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ncm"}}},
+	}},
 	{Name: "syz_usb_control_io$hid", CallName: "syz_usb_control_io", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_hid", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_hid"}}},
@@ -44192,6 +44505,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 9}, Kind: 2, Values: []string{"threaded\x00"}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 8}}, BitSize: 8, Path: []string{"buf"}},
 	}},
+	{NR: 64, Name: "write$char_usb", CallName: "write", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Path: []string{"buf"}},
+	}},
 	{NR: 64, Name: "write$evdev", CallName: "write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_evdev", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "data", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "input_event"}}}},
@@ -44914,6 +45232,8 @@
 	{Name: "CAPI_SELECT_B_PROTOCOL", Value: 65},
 	{Name: "CAPI_SET_FLAGS", Value: 2147762980},
 	{Name: "CAP_LAST_CAP", Value: 37},
+	{Name: "CDC_NCM_COMM_ALTSETTING_NCM"},
+	{Name: "CDC_NCM_DATA_ALTSETTING_NCM", Value: 1},
 	{Name: "CDO_AUTO_CLOSE", Value: 1},
 	{Name: "CDO_AUTO_EJECT", Value: 2},
 	{Name: "CDO_CHECK_TYPE", Value: 16},
@@ -45978,6 +46298,7 @@
 	{Name: "HID_REPORT_ID_UNKNOWN", Value: 4294967295},
 	{Name: "HID_REPORT_TYPE_MAX", Value: 3},
 	{Name: "HID_REPORT_TYPE_MIN", Value: 1},
+	{Name: "HID_REQ_GET_PROTOCOL", Value: 3},
 	{Name: "HID_REQ_GET_REPORT", Value: 1},
 	{Name: "HUB_CHANGE_LOCAL_POWER", Value: 1},
 	{Name: "HUB_CHANGE_OVERCURRENT", Value: 2},
@@ -50245,6 +50566,10 @@
 	{Name: "USB_CDC_COUNTRY_TYPE", Value: 7},
 	{Name: "USB_CDC_DMM_TYPE", Value: 20},
 	{Name: "USB_CDC_ETHERNET_TYPE", Value: 15},
+	{Name: "USB_CDC_GET_CRC_MODE", Value: 137},
+	{Name: "USB_CDC_GET_MAX_DATAGRAM_SIZE", Value: 135},
+	{Name: "USB_CDC_GET_NTB_FORMAT", Value: 131},
+	{Name: "USB_CDC_GET_NTB_INPUT_SIZE", Value: 133},
 	{Name: "USB_CDC_GET_NTB_PARAMETERS", Value: 128},
 	{Name: "USB_CDC_HEADER_TYPE"},
 	{Name: "USB_CDC_MBIM_EXTENDED_TYPE", Value: 28},
@@ -50254,8 +50579,11 @@
 	{Name: "USB_CDC_NCM_TYPE", Value: 26},
 	{Name: "USB_CDC_NETWORK_TERMINAL_TYPE", Value: 10},
 	{Name: "USB_CDC_OBEX_TYPE", Value: 21},
+	{Name: "USB_CDC_PROTO_NONE"},
+	{Name: "USB_CDC_SUBCLASS_ETHERNET", Value: 6},
+	{Name: "USB_CDC_SUBCLASS_NCM", Value: 13},
 	{Name: "USB_CDC_UNION_TYPE", Value: 6},
-	{Name: "USB_CDC_WHCM_TYPE", Value: 17},
+	{Name: "USB_CLASS_COMM", Value: 2},
 	{Name: "USB_CLASS_HID", Value: 3},
 	{Name: "USB_CLASS_PRINTER", Value: 7},
 	{Name: "USB_CONFIG_ATT_BATTERY", Value: 16},
@@ -50295,6 +50623,11 @@
 	{Name: "USB_DT_STRING", Value: 3},
 	{Name: "USB_DT_WIRELESS_ENDPOINT_COMP", Value: 17},
 	{Name: "USB_DT_WIRE_ADAPTER", Value: 33},
+	{Name: "USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES", Value: 2},
+	{Name: "USB_ENDPOINT_CDC_ECM_IN_ADDRESS", Value: 130},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS", Value: 129},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES", Value: 3},
+	{Name: "USB_ENDPOINT_CDC_ECM_OUT_ADDRESS", Value: 3},
 	{Name: "USB_ENDPOINT_HID_ATTRIBUTES", Value: 3},
 	{Name: "USB_ENDPOINT_HID_IN_ADDRESS", Value: 129},
 	{Name: "USB_ENDPOINT_HID_OUT_ADDRESS", Value: 2},
@@ -50326,6 +50659,7 @@
 	{Name: "USB_LOW_SPEED_OPERATION", Value: 1},
 	{Name: "USB_LPM_SUPPORT", Value: 2},
 	{Name: "USB_LTM_SUPPORT", Value: 2},
+	{Name: "USB_MAJOR", Value: 180},
 	{Name: "USB_PORT_STAT_CONNECTION", Value: 1},
 	{Name: "USB_PORT_STAT_C_BH_RESET", Value: 32},
 	{Name: "USB_PORT_STAT_C_CONFIG_ERROR", Value: 128},
@@ -52112,4 +52446,4 @@
 	{Name: "bpf_insn_load_imm_dw", Value: 24},
 }
 
-const revision_arm64 = "26a51558327902a8e8951bd6afdcdae046006802"
+const revision_arm64 = "ace614dc3bdc1ab3e0dfe5514e2718cdd818e071"
diff --git a/sys/linux/gen/ppc64le.go b/sys/linux/gen/ppc64le.go
index 7788c1e..e2280d0 100644
--- a/sys/linux/gen/ppc64le.go
+++ b/sys/linux/gen/ppc64le.go
@@ -40,6 +40,7 @@
 	{Name: "fd_cgroup_pid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_pid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_subtree", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_subtree"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_cgroup_type", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_cgroup_type"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_char_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_char_usb"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dir", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dir"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_dma_buf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dma_buf"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_dmabuf", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_dmabuf"}, Values: []uint64{18446744073709551615}},
@@ -112,6 +113,8 @@
 	{Name: "fd_uhid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uhid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_uinput", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_uinput"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ecm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ecm"}, Values: []uint64{18446744073709551615}},
+	{Name: "fd_usb_cdc_ncm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_cdc_ncm"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_hid", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_hid"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usb_printer", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd_usb", "fd_usb_printer"}, Values: []uint64{18446744073709551615}},
 	{Name: "fd_usbmon", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_usbmon"}, Values: []uint64{18446744073709551615}},
@@ -25401,11 +25404,12 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 2},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_acm_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2, 4, 8}, BitMask: true},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 4}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_descriptor", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_call_mgmt_caps", FldName: "bmCapabilities", TypeSize: 1}}, Vals: []uint64{1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDataInterface", TypeSize: 1}}},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_country_functional_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25422,40 +25426,42 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxCommand", TypeSize: 2}}},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mac"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mac", TypeSize: 24}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data0", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data1", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "data2", TypeSize: 8}, ArgFormat: 1}, Val: 3747049866426069504},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ecm_mbm_guid", TypeSize: 16}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id0", TypeSize: 8}}, Val: 94397490813999011},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "id1", TypeSize: 8}}, Val: 3042602437899716518},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_ether_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_ether_desc", TypeSize: 13}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 15},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iMACAddress", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iMACAddress", TypeSize: 1}}, Val: 1},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "bmEthernetStatistics", TypeSize: 4}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxSegmentSize", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wNumberMCFilters", TypeSize: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumberPowerFilters", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_generic", IsVarlen: true}, Fields: []Type{
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_cdc_types", FldName: "bDescriptorSubType", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 6, 7, 10, 15, 17, 18, 19, 20, 21, 26, 27, 28}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
-	}}},
-	{Key: StructKey{Name: "usb_cdc_header"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header", IsVarlen: true}, Fields: []Type{
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "items", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_item"}}, Kind: 1, RangeEnd: 16},
-	}}},
 	{Key: StructKey{Name: "usb_cdc_header_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_desc", TypeSize: 5}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdCDC", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_header_item"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_item", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_cdc_generic"}, FldName: "generic"},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ethernet_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ethernet_other", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
 		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
-		&StructType{Key: StructKey{Name: "usb_cdc_union_desc"}, FldName: "union"},
 		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
 		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
-		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
 		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
@@ -25464,6 +25470,25 @@
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
 		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
 	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, FldName: "union"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_desc"}, FldName: "header"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ether_desc"}, FldName: "ether"},
+		&StructType{Key: StructKey{Name: "usb_cdc_ncm_desc"}, FldName: "ncm"},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "other", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_cdc_header_ncm_other"}}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_header_ncm_other"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_header_ncm_other", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_cdc_call_mgmt_descriptor"}, FldName: "call_mgmt"},
+		&StructType{Key: StructKey{Name: "usb_cdc_acm_descriptor"}, FldName: "acm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_country_functional_desc"}, FldName: "country_functional"},
+		&StructType{Key: StructKey{Name: "usb_cdc_network_terminal_desc"}, FldName: "network_terminal"},
+		&StructType{Key: StructKey{Name: "usb_cdc_dmm_desc"}, FldName: "dmm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_desc"}, FldName: "mdlm"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, FldName: "mdlm_detail"},
+		&StructType{Key: StructKey{Name: "usb_cdc_obex_desc"}, FldName: "obex"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_desc"}, FldName: "mbim"},
+		&StructType{Key: StructKey{Name: "usb_cdc_mbim_extended_desc"}, FldName: "mbim_extended"},
+	}}},
 	{Key: StructKey{Name: "usb_cdc_mbim_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mbim_desc", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
@@ -25488,7 +25513,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 18},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
-		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bGUID", TypeSize: 16}, Kind: 1, RangeBegin: 16, RangeEnd: 16},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mbm_guid"}, FldName: "bGUID"},
 	}}},
 	{Key: StructKey{Name: "usb_cdc_mdlm_detail_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_mdlm_detail_desc", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
@@ -25533,24 +25558,60 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 21},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "bcdVersion", TypeSize: 2}}},
 	}}},
-	{Key: StructKey{Name: "usb_cdc_union_desc"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 0]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 0]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMasterInterface0", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
+	}}},
+	{Key: StructKey{Name: "usb_cdc_union_desc_t[0, 1]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_cdc_union_desc_t[0, 1]", IsVarlen: true}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 36},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorSubType", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bMasterInterface0", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bSlaveInterface0", TypeSize: 1}}, Val: 1},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "slave_interfaces", IsVarlen: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_config_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumInterfaces", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, FldName: "interfaces"},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumInterfaces", TypeSize: 1}}, Path: []string{"interfaces"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bConfigurationValue", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25561,7 +25622,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[const[1, int8], len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25572,7 +25633,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_config_descriptor_t[int8, len[interfaces, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 2},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "wTotalLength", TypeSize: 2}}, Path: []string{"parent"}},
@@ -25581,7 +25642,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iConfiguration", TypeSize: 1}}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_config_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{128, 64, 32, 16}, BitMask: true},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bMaxPower", TypeSize: 1}}},
-		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "interfaces", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_interface_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 4},
 	}}},
 	{Key: StructKey{Name: "usb_dev_cap"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_dev_cap", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_cap_descriptor"}, FldName: "generic"},
@@ -25595,11 +25656,17 @@
 	{Key: StructKey{Name: "usb_device_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 64, array[usb_config_descriptor_hid, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
@@ -25608,13 +25675,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
@@ -25625,36 +25692,79 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_hid"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
-	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1008},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 27671},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42152},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iManufacturer", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iProduct", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iSerialNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_printer"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
 	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ecm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 18},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_versions", FldName: "bcdUSB", TypeSize: 2}}, Vals: []uint64{272, 512, 513, 592, 768, 784}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceSubClass", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDeviceProtocol", TypeSize: 1}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idVendor", TypeSize: 2}}, Val: 1317},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "idProduct", TypeSize: 2}}, Val: 42145},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bcdDevice", TypeSize: 2}}, Val: 64},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iManufacturer", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iProduct", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "iSerialNumber", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumConfigurations", TypeSize: 1}}, Path: []string{"configs"}},
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "configs", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_config_descriptor_cdc_ncm"}}, Kind: 1, RangeBegin: 1, RangeEnd: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[flags[usb_endpoint_addresses, int8], flags[usb_endpoint_attributes, int8], array[usb_endpoint_extra_descriptor, 0:2]]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_in", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_notify", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_cdc_ecm_out", TypeSize: 9}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, FldName: "inner"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_hid_in", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
@@ -25667,12 +25777,45 @@
 	{Key: StructKey{Name: "usb_endpoint_descriptor_printer_out"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_printer_out", TypeSize: 9}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_PRINTER_OUT_ADDRESS, int8], const[USB_ENDPOINT_PRINTER_ATTRIBUTES, int8], void]"}, FldName: "inner"},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptor_t[const[USB_ENDPOINT_HID_IN_ADDRESS, int8], const[USB_ENDPOINT_HID_ATTRIBUTES, int8], void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 129},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25683,7 +25826,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 2},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25694,7 +25837,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 130},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25705,7 +25848,7 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bEndpointAddress", TypeSize: 1}}, Val: 1},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bmAttributes", TypeSize: 1}}, Val: 2},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
@@ -25716,12 +25859,21 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 5},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_addresses", FldName: "bEndpointAddress", TypeSize: 1}}, Vals: []uint64{1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 0, 128}},
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_endpoint_attributes", FldName: "bmAttributes", TypeSize: 1}}, Vals: []uint64{0, 1, 2, 3, 0, 16, 0, 4, 8, 12, 0, 16, 16}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "wMaxPacketSize", TypeSize: 2}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "wMaxPacketSize", TypeSize: 2}}, Kind: 2, RangeEnd: 1024},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterval", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bRefresh", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bSynchAddress", TypeSize: 1}}},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_endpoint_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "notify", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}}, Kind: 1, RangeEnd: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
+	{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_cdc_ncm_data", TypeSize: 18}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_in"}, FldName: "in"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_out"}, FldName: "out"},
+	}}},
 	{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_endpoint_descriptors_hid", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_in"}, FldName: "in"},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "out", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor_hid_out"}}, Kind: 1, RangeEnd: 1},
@@ -25791,15 +25943,70 @@
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hub_change_flags", FldName: "wHubChange", TypeSize: 2}}, Vals: []uint64{1, 2}, BitMask: true},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, FldName: "inner"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_cdc_ecm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_hid", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, FldName: "inner"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_descriptor_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_printer", IsVarlen: true}, Fields: []Type{
-		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, FldName: "inner"},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ncm"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptor_cdc_ecm_notify"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]", IsVarlen: true}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumEndpoints", TypeSize: 1}}, Kind: 2, RangeBegin: 2, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 6},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "extra"},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ecm"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[0, int8], int8, len[endpoints, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}},
@@ -25812,36 +26019,41 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "extra", IsVarlen: true}, Type: &UnionType{Key: StructKey{Name: "usb_interface_extra_descriptor"}}, Kind: 1, RangeEnd: 2},
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "endpoints", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "usb_endpoint_descriptor"}}, Kind: 1, RangeEnd: 16},
 	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]", IsVarlen: true}, Fields: []Type{
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]", TypeSize: 9}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 3},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_hid_protocols", FldName: "bInterfaceProtocol", TypeSize: 1}}, Vals: []uint64{0, 1, 2}, BitMask: true},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
-		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "extra"},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_hid"}, FldName: "endpoints"},
-	}}},
-	{Key: StructKey{Name: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]", IsVarlen: true}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceNumber", TypeSize: 1}}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bAlternateSetting", TypeSize: 1}}},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bNumEndpoints", TypeSize: 1}}, Path: []string{"endpoints"}},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 7},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 1},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bInterfaceProtocol", TypeSize: 1}}, Kind: 2, RangeBegin: 1, RangeEnd: 3},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
-		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_printer"}, FldName: "endpoints"},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "endpoints"}, Kind: 1},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]", TypeSize: 27}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bLength", TypeSize: 1}}, Val: 9},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 4},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceNumber", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bAlternateSetting", TypeSize: 1}}, Val: 1},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bNumEndpoints", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceClass", TypeSize: 1}}, Val: 2},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceSubClass", TypeSize: 1}}, Val: 13},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bInterfaceProtocol", TypeSize: 1}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "iInterface", TypeSize: 1}}},
+		&BufferType{TypeCommon: TypeCommon{TypeName: "void", FldName: "extra"}, Kind: 1},
+		&StructType{Key: StructKey{Name: "usb_endpoint_descriptors_cdc_ncm_data"}, FldName: "endpoints"},
+	}}},
+	{Key: StructKey{Name: "usb_interface_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_descriptors_cdc_ncm", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]"}, FldName: "control"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]"}, FldName: "data_nop"},
+		&StructType{Key: StructKey{Name: "usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "usb_interface_extra_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_interface_extra_descriptor", IsVarlen: true}, Fields: []Type{
 		&StructType{Key: StructKey{Name: "usb_generic_descriptor"}, FldName: "generic"},
 		&StructType{Key: StructKey{Name: "usb_hid_descriptor_hid"}, FldName: "hid_hid"},
-		&StructType{Key: StructKey{Name: "usb_cdc_header"}, FldName: "usb_cdc"},
+		&StructType{Key: StructKey{Name: "usb_cdc_header_ethernet"}, FldName: "usb_cdc"},
 	}}},
 	{Key: StructKey{Name: "usb_port_status"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_port_status", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_port_status_flags", FldName: "wPortStatus", TypeSize: 2}}, Vals: []uint64{1, 2, 4, 8, 16, 32, 256, 512, 1024, 2048, 4096, 480, 512, 7168, 0, 0, 32, 64, 96, 128, 160, 192, 224, 256, 288, 320, 352}},
@@ -25864,7 +26076,7 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceSubClass", TypeSize: 1}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bDeviceProtocol", TypeSize: 1}}},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_max_packet_sizes", FldName: "bMaxPacketSize0", TypeSize: 1}}, Vals: []uint64{8, 16, 32, 64, 255}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "bNumConfigurations", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bRESERVED", TypeSize: 1}}},
 	}}},
@@ -25897,11 +26109,24 @@
 		&ArrayType{TypeCommon: TypeCommon{TypeName: "array", FldName: "bmSublinkSpeedAttr", IsVarlen: true}, Type: &FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_ssp_cap_sublink_speeds", TypeSize: 4}}, Vals: []uint64{15, 48, 192, 16128, 49152, 16711680}, BitMask: true}, Kind: 1, RangeEnd: 6},
 	}}},
 	{Key: StructKey{Name: "usb_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor", IsVarlen: true}, Fields: []Type{
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, FldName: "lang_id"},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, FldName: "string"},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[array[int8]]", IsVarlen: true}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
-		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "lang_id", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[flags[usb_lang_ids, int16]]", TypeSize: 4}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_lang_ids", FldName: "data", TypeSize: 2}}, Vals: []uint64{1078, 1052, 1025, 2049, 3073, 4097, 5121, 6145, 7169, 8193, 9217, 10241, 11265, 12289, 13313, 14337, 15361, 16385, 1067, 1101, 1068, 2092, 1069, 1059, 1093, 1026, 1109, 1027, 1028, 2052, 3076, 4100, 5124, 1050, 1029, 1030, 1043, 2067, 1033, 2057, 3081, 4105, 5129, 6153, 7177, 8201, 9225, 10249, 11273, 12297, 13321, 1061, 1080, 1065, 1035, 1036, 2060, 3084, 4108, 5132, 6156, 1079, 1031, 2055, 3079, 4103, 5127, 1032, 1095, 1037, 1081, 1038, 1039, 1057, 1040, 2064, 1041, 1099, 2144, 1087, 1111, 1042, 2066, 1062, 1063, 2087, 1071, 1086, 2110, 1100, 1112, 1102, 2145, 1044, 2068, 1096, 1045, 1046, 2070, 1094, 1048, 1049, 1103, 3098, 2074, 1113, 1051, 1060, 1034, 2058, 3082, 4106, 5130, 6154, 7178, 8202, 9226, 10250, 11274, 12298, 13322, 14346, 15370, 16394, 17418, 18442, 19466, 20490, 1072, 1089, 1053, 2077, 1097, 1092, 1098, 1054, 1055, 1058, 1056, 2080, 1091, 2115, 1066, 1279, 61695, 62719, 63743, 64767}},
+	}}},
+	{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_string_descriptor_t[usb_cdc_ecm_mac]", TypeSize: 26}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 3},
+		&StructType{Key: StructKey{Name: "usb_cdc_ecm_mac"}, FldName: "data"},
+	}}},
 	{Key: StructKey{Name: "usb_wireless_cap_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "usb_wireless_cap_descriptor", TypeSize: 11}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "bLength", TypeSize: 1}}, Path: []string{"parent"}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "bDescriptorType", TypeSize: 1}}, Val: 16},
@@ -27002,7 +27227,7 @@
 	}}},
 	{Key: StructKey{Name: "vusb_connect_string_descriptor"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_connect_string_descriptor", TypeSize: 12}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"str"}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_string_descriptor"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "str", TypeSize: 8}, Type: &UnionType{Key: StructKey{Name: "usb_string_descriptor"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptor_generic"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_generic", IsVarlen: true}, Fields: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_request_types", FldName: "req_type", TypeSize: 1}}, Vals: []uint64{0, 32, 64}, BitMask: true},
@@ -27044,7 +27269,13 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&StructType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+		&UnionType{Key: StructKey{Name: "usb_string_descriptor"}, FldName: "data"},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]", TypeSize: 32}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&StructType{Key: StructKey{Name: "usb_string_descriptor_t[usb_cdc_ecm_mac]"}, FldName: "data"},
 	}}},
 	{Key: StructKey{Name: "vusb_descriptors"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors", TypeSize: 44}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -27054,6 +27285,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_hs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_HUB, usb_hub_descriptor_hs]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_ss", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_CLASS, USB_DT_SS_HUB, usb_hub_descriptor_ss]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ecm", TypeSize: 20}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_cdc_ncm", TypeSize: 20}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_DT_STRING", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_descriptors_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_descriptors_hid", TypeSize: 36}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptor_generic"}}},
@@ -27072,18 +27313,18 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]", TypeSize: 7}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 3},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&BufferType{TypeCommon: TypeCommon{TypeName: "array", FldName: "data", IsVarlen: true}},
 	}}},
-	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]", TypeSize: 7}, Fields: []Type{
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
-		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 1},
-		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
-		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
-	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_CUR, array[int8, 1:3]]", IsVarlen: true}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 129},
@@ -27132,6 +27373,30 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 137},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 135},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]", TypeSize: 8}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 131},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "data", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+	}}},
+	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]", TypeSize: 10}, Fields: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 133},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "data", TypeSize: 4}}},
+	}}},
 	{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]", TypeSize: 34}, Fields: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "type", TypeSize: 1}}, Val: 32},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "req", TypeSize: 1}}, Val: 128},
@@ -27228,7 +27493,7 @@
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 4}}, BitSize: 8, Path: []string{"data"}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "data", TypeSize: 1}}},
 	}}},
-	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 180}, Fields: []Type{
+	{Key: StructKey{Name: "vusb_responses"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses", TypeSize: 172}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "get_interface", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
@@ -27240,7 +27505,6 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "audio_UAC_GET_MEM", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, UAC_GET_MEM, array[int8, 3]]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_hub", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_hub_status]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "hub_USB_REQ_GET_STATUS_port", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_port_status]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "cdc_USB_CDC_GET_NTB_PARAMETERS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_MII_REG", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_MII_REG, int16]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_STATMNGSTS_REG", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_STATMNGSTS_REG, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_EEPROM", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_EEPROM, array[int8, 2]]"}}},
@@ -27253,13 +27517,30 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_READ_GPIOS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_GPIOS, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "asix_AX_CMD_SW_PHY_STATUS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_VENDOR, AX_CMD_SW_PHY_STATUS, int8]"}}},
 	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ecm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ecm", TypeSize: 28}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+	}}},
+	{Key: StructKey{Name: "vusb_responses_cdc_ncm"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_cdc_ncm", TypeSize: 68}, Fields: []Type{
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_PARAMETERS", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_INPUT_SIZE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_NTB_FORMAT", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_MAX_DATAGRAM_SIZE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_CDC_GET_CRC_MODE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]"}}},
+	}}},
 	{Key: StructKey{Name: "vusb_responses_hid"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_hid", TypeSize: 44}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "generic", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_generic"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_INTERFACE", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "USB_REQ_GET_CONFIGURATION", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_REPORT", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]"}}},
-		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "HID_REQ_GET_PROTOCOL", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]"}}},
 	}}},
 	{Key: StructKey{Name: "vusb_responses_printer"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "vusb_responses_printer", TypeSize: 52}, Fields: []Type{
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "len", TypeSize: 4}}, Path: []string{"parent"}},
@@ -39221,6 +39502,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "size", TypeSize: 8}}, Path: []string{"buf"}},
 	}},
+	{NR: 3, Name: "read$char_usb", CallName: "read", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", ArgDir: 1, IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Path: []string{"buf"}},
+	}},
 	{NR: 3, Name: "read$eventfd", CallName: "read", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_event", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "val", TypeSize: 8}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", TypeSize: 8, ArgDir: 1}}}},
@@ -43060,6 +43346,11 @@
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "id", TypeSize: 8}}, ValuesPerProc: 4},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "flags", TypeSize: 8}}, Val: 2},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_open_dev$char_usb", CallName: "syz_open_dev", Args: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "dev", TypeSize: 8}}, Val: 12},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "major", TypeSize: 8}}, Val: 180},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "minor", TypeSize: 8}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_open_dev$dmmidi", CallName: "syz_open_dev", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 13}, Kind: 2, Values: []string{"/dev/dmmidi#\x00"}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "id", TypeSize: 8}}},
@@ -43268,6 +43559,18 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ecm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{Name: "syz_usb_connect$cdc_ncm", CallName: "syz_usb_connect", Args: []Type{
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "dev", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "usb_device_descriptor_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "conn_descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_connect_descriptors"}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{Name: "syz_usb_connect$hid", CallName: "syz_usb_connect", Args: []Type{
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "usb_device_speed", FldName: "speed", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 3, 4, 5, 6}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "dev_len", TypeSize: 8}}, Path: []string{"dev"}},
@@ -43285,6 +43588,16 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors"}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses"}}},
 	}},
+	{Name: "syz_usb_control_io$cdc_ecm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ecm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ecm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ecm"}}},
+	}},
+	{Name: "syz_usb_control_io$cdc_ncm", CallName: "syz_usb_control_io", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_cdc_ncm", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_cdc_ncm"}}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "resps", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_responses_cdc_ncm"}}},
+	}},
 	{Name: "syz_usb_control_io$hid", CallName: "syz_usb_control_io", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_usb_hid", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "descs", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "vusb_descriptors_hid"}}},
@@ -44186,6 +44499,11 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 9}, Kind: 2, Values: []string{"threaded\x00"}}},
 		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bytesize", FldName: "len", TypeSize: 8}}, BitSize: 8, Path: []string{"buf"}},
 	}},
+	{NR: 4, Name: "write$char_usb", CallName: "write", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_char_usb", FldName: "fd", TypeSize: 4}},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "buf", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}}},
+		&LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", FldName: "count", TypeSize: 8}}, Path: []string{"buf"}},
+	}},
 	{NR: 4, Name: "write$evdev", CallName: "write", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_evdev", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "data", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "input_event"}}}},
@@ -44908,6 +45226,8 @@
 	{Name: "CAPI_SELECT_B_PROTOCOL", Value: 65},
 	{Name: "CAPI_SET_FLAGS", Value: 1074021156},
 	{Name: "CAP_LAST_CAP", Value: 37},
+	{Name: "CDC_NCM_COMM_ALTSETTING_NCM"},
+	{Name: "CDC_NCM_DATA_ALTSETTING_NCM", Value: 1},
 	{Name: "CDO_AUTO_CLOSE", Value: 1},
 	{Name: "CDO_AUTO_EJECT", Value: 2},
 	{Name: "CDO_CHECK_TYPE", Value: 16},
@@ -45972,6 +46292,7 @@
 	{Name: "HID_REPORT_ID_UNKNOWN", Value: 4294967295},
 	{Name: "HID_REPORT_TYPE_MAX", Value: 3},
 	{Name: "HID_REPORT_TYPE_MIN", Value: 1},
+	{Name: "HID_REQ_GET_PROTOCOL", Value: 3},
 	{Name: "HID_REQ_GET_REPORT", Value: 1},
 	{Name: "HUB_CHANGE_LOCAL_POWER", Value: 1},
 	{Name: "HUB_CHANGE_OVERCURRENT", Value: 2},
@@ -50218,6 +50539,10 @@
 	{Name: "USB_CDC_COUNTRY_TYPE", Value: 7},
 	{Name: "USB_CDC_DMM_TYPE", Value: 20},
 	{Name: "USB_CDC_ETHERNET_TYPE", Value: 15},
+	{Name: "USB_CDC_GET_CRC_MODE", Value: 137},
+	{Name: "USB_CDC_GET_MAX_DATAGRAM_SIZE", Value: 135},
+	{Name: "USB_CDC_GET_NTB_FORMAT", Value: 131},
+	{Name: "USB_CDC_GET_NTB_INPUT_SIZE", Value: 133},
 	{Name: "USB_CDC_GET_NTB_PARAMETERS", Value: 128},
 	{Name: "USB_CDC_HEADER_TYPE"},
 	{Name: "USB_CDC_MBIM_EXTENDED_TYPE", Value: 28},
@@ -50227,8 +50552,11 @@
 	{Name: "USB_CDC_NCM_TYPE", Value: 26},
 	{Name: "USB_CDC_NETWORK_TERMINAL_TYPE", Value: 10},
 	{Name: "USB_CDC_OBEX_TYPE", Value: 21},
+	{Name: "USB_CDC_PROTO_NONE"},
+	{Name: "USB_CDC_SUBCLASS_ETHERNET", Value: 6},
+	{Name: "USB_CDC_SUBCLASS_NCM", Value: 13},
 	{Name: "USB_CDC_UNION_TYPE", Value: 6},
-	{Name: "USB_CDC_WHCM_TYPE", Value: 17},
+	{Name: "USB_CLASS_COMM", Value: 2},
 	{Name: "USB_CLASS_HID", Value: 3},
 	{Name: "USB_CLASS_PRINTER", Value: 7},
 	{Name: "USB_CONFIG_ATT_BATTERY", Value: 16},
@@ -50268,6 +50596,11 @@
 	{Name: "USB_DT_STRING", Value: 3},
 	{Name: "USB_DT_WIRELESS_ENDPOINT_COMP", Value: 17},
 	{Name: "USB_DT_WIRE_ADAPTER", Value: 33},
+	{Name: "USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES", Value: 2},
+	{Name: "USB_ENDPOINT_CDC_ECM_IN_ADDRESS", Value: 130},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS", Value: 129},
+	{Name: "USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES", Value: 3},
+	{Name: "USB_ENDPOINT_CDC_ECM_OUT_ADDRESS", Value: 3},
 	{Name: "USB_ENDPOINT_HID_ATTRIBUTES", Value: 3},
 	{Name: "USB_ENDPOINT_HID_IN_ADDRESS", Value: 129},
 	{Name: "USB_ENDPOINT_HID_OUT_ADDRESS", Value: 2},
@@ -50299,6 +50632,7 @@
 	{Name: "USB_LOW_SPEED_OPERATION", Value: 1},
 	{Name: "USB_LPM_SUPPORT", Value: 2},
 	{Name: "USB_LTM_SUPPORT", Value: 2},
+	{Name: "USB_MAJOR", Value: 180},
 	{Name: "USB_PORT_STAT_CONNECTION", Value: 1},
 	{Name: "USB_PORT_STAT_C_BH_RESET", Value: 32},
 	{Name: "USB_PORT_STAT_C_CONFIG_ERROR", Value: 128},
@@ -52077,4 +52411,4 @@
 	{Name: "bpf_insn_load_imm_dw", Value: 24},
 }
 
-const revision_ppc64le = "d118414cc10f2c07b6a9e1fae0e14db998375343"
+const revision_ppc64le = "a3c972567317d3e84a2e833c05a73c8218815ee9"
diff --git a/sys/linux/init.go b/sys/linux/init.go
index e24e7eb..5ae9f00 100644
--- a/sys/linux/init.go
+++ b/sys/linux/init.go
@@ -41,6 +41,7 @@
 		AF_AX25:                     target.GetConst("AF_AX25"),
 		AF_NETROM:                   target.GetConst("AF_NETROM"),
 		AF_ROSE:                     target.GetConst("AF_ROSE"),
+		USB_MAJOR:                   target.GetConst("USB_MAJOR"),
 		// These are not present on all arches.
 		ARCH_SET_FS: target.ConstMap["ARCH_SET_FS"],
 		ARCH_SET_GS: target.ConstMap["ARCH_SET_GS"],
@@ -138,6 +139,7 @@
 	AF_AX25                     uint64
 	AF_NETROM                   uint64
 	AF_ROSE                     uint64
+	USB_MAJOR                   uint64
 }
 
 func (arch *arch) sanitizeCall(c *prog.Call) {
@@ -206,6 +208,10 @@
 	switch c.Meta.Name {
 	case "setsockopt$EBT_SO_SET_ENTRIES":
 		arch.sanitizeEbtables(c)
+	case "syz_open_dev$char_usb":
+		// Don't allow opening various char and block devices.
+		c.Args[0].(*prog.ConstArg).Val = 0xc
+		c.Args[1].(*prog.ConstArg).Val = arch.USB_MAJOR
 	}
 }
 
diff --git a/sys/linux/init_vusb.go b/sys/linux/init_vusb.go
index ac70241..7a61b09 100644
--- a/sys/linux/init_vusb.go
+++ b/sys/linux/init_vusb.go
@@ -63,6 +63,36 @@
 		return
 	}
 
+	id := randUsbDeviceID(g)
+	bcdDevice := id.BcdDeviceLo + uint16(g.Rand().Intn(int(id.BcdDeviceHi-id.BcdDeviceLo)+1))
+
+	devArg := arg.(*prog.GroupArg).Inner[0]
+	patchGroupArg(devArg, 7, "idVendor", uint64(id.IDVendor))
+	patchGroupArg(devArg, 8, "idProduct", uint64(id.IDProduct))
+	patchGroupArg(devArg, 9, "bcdDevice", uint64(bcdDevice))
+	patchGroupArg(devArg, 3, "bDeviceClass", uint64(id.BDeviceClass))
+	patchGroupArg(devArg, 4, "bDeviceSubClass", uint64(id.BDeviceSubClass))
+	patchGroupArg(devArg, 5, "bDeviceProtocol", uint64(id.BDeviceProtocol))
+
+	configArg := devArg.(*prog.GroupArg).Inner[14].(*prog.GroupArg).Inner[0].(*prog.GroupArg).Inner[0]
+	interfacesArg := configArg.(*prog.GroupArg).Inner[8]
+
+	for i, interfaceArg := range interfacesArg.(*prog.GroupArg).Inner {
+		interfaceArg = interfaceArg.(*prog.GroupArg).Inner[0]
+		if i > 0 {
+			// Generate new IDs for every interface after the first one.
+			id = randUsbDeviceID(g)
+		}
+		patchGroupArg(interfaceArg, 5, "bInterfaceClass", uint64(id.BInterfaceClass))
+		patchGroupArg(interfaceArg, 6, "bInterfaceSubClass", uint64(id.BInterfaceSubClass))
+		patchGroupArg(interfaceArg, 7, "bInterfaceProtocol", uint64(id.BInterfaceProtocol))
+		patchGroupArg(interfaceArg, 2, "bInterfaceNumber", uint64(id.BInterfaceNumber))
+	}
+
+	return
+}
+
+func randUsbDeviceID(g *prog.Gen) UsbDeviceID {
 	totalIds := len(usbIds) / BytesPerUsbID
 	idNum := g.Rand().Intn(totalIds)
 	base := usbIds[idNum*BytesPerUsbID : (idNum+1)*BytesPerUsbID]
@@ -85,7 +115,6 @@
 	if (id.MatchFlags & USB_DEVICE_ID_MATCH_DEV_HI) == 0 {
 		id.BcdDeviceHi = 0xffff
 	}
-	bcdDevice := id.BcdDeviceLo + uint16(g.Rand().Intn(int(id.BcdDeviceHi-id.BcdDeviceLo)+1))
 	if (id.MatchFlags & USB_DEVICE_ID_MATCH_DEV_CLASS) == 0 {
 		id.BDeviceClass = uint8(g.Rand().Intn(0xff + 1))
 	}
@@ -108,23 +137,7 @@
 		id.BInterfaceNumber = uint8(g.Rand().Intn(0xff + 1))
 	}
 
-	devArg := arg.(*prog.GroupArg).Inner[0]
-	patchGroupArg(devArg, 7, "idVendor", uint64(id.IDVendor))
-	patchGroupArg(devArg, 8, "idProduct", uint64(id.IDProduct))
-	patchGroupArg(devArg, 9, "bcdDevice", uint64(bcdDevice))
-	patchGroupArg(devArg, 3, "bDeviceClass", uint64(id.BDeviceClass))
-	patchGroupArg(devArg, 4, "bDeviceSubClass", uint64(id.BDeviceSubClass))
-	patchGroupArg(devArg, 5, "bDeviceProtocol", uint64(id.BDeviceProtocol))
-
-	configArg := devArg.(*prog.GroupArg).Inner[14].(*prog.GroupArg).Inner[0].(*prog.GroupArg).Inner[0]
-	interfaceArg := configArg.(*prog.GroupArg).Inner[8].(*prog.GroupArg).Inner[0].(*prog.GroupArg).Inner[0]
-
-	patchGroupArg(interfaceArg, 5, "bInterfaceClass", uint64(id.BInterfaceClass))
-	patchGroupArg(interfaceArg, 6, "bInterfaceSubClass", uint64(id.BInterfaceSubClass))
-	patchGroupArg(interfaceArg, 7, "bInterfaceProtocol", uint64(id.BInterfaceProtocol))
-	patchGroupArg(interfaceArg, 2, "bInterfaceNumber", uint64(id.BInterfaceNumber))
-
-	return
+	return id
 }
 
 func (arch *arch) generateUsbHidDeviceDescriptor(g *prog.Gen, typ0 prog.Type, old prog.Arg) (
diff --git a/sys/linux/init_vusb_ids.go b/sys/linux/init_vusb_ids.go
index fd8bcdc..1457ebc 100644
--- a/sys/linux/init_vusb_ids.go
+++ b/sys/linux/init_vusb_ids.go
@@ -5612,6 +5612,7 @@
 	"\x03\x04\x14\x15\b \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x02" +
 	"\x03\x04  1 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" +
 	"\x03\x04  3 \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" +
+	"\x03\x04  ` \x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" +
 	"\x03\x04-\x1eS\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" +
 	"\x03\x04-\x1e`\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x04" +
 	"\x03\x04-\x1ec\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\n" +
@@ -6045,7 +6046,7 @@
 	"\x0f\x00-\x15a\x95\x00\x00\x99\x99\x00\x00\x00\x00\x00\x00\x00" +
 	"\x0f\x00-\x15f%\x14\x01\x14\x01\x00\x00\x00\x00\x00\x00\x00" +
 	"\x0f\x00-\x15g\x05\x00\x00\x99\x99\x00\x00\x00\x00\x00\x00\x00" +
-	"\x0f\x00-\x15g\x05\x14\x01\x16\x01\x00\x00\x00\x00\x00\x00\x00" +
+	"\x0f\x00-\x15g\x05\x14\x01\x17\x01\x00\x00\x00\x00\x00\x00\x00" +
 	"\x0f\x00-\x15g%\x17\x01\x17\x01\x00\x00\x00\x00\x00\x00\x00" +
 	"\x0f\x00-\x15x\x05\x00\x00\x99\x99\x00\x00\x00\x00\x00\x00\x00" +
 	"\x0f\x005'\v\x10\x00\x00\x99\x99\x00\x00\x00\x00\x00\x00\x00" +
@@ -6877,10 +6878,12 @@
 	"\x83\x00\x01 \x0e}\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00\x01 \x19~\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00\x01 5~\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
+	"\x83\x00\x01 =~\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00\x0e\x1e\x03\x90\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00\x0e\x1e\x11\x90\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00  \x00@\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00  1 \x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
+	"\x83\x00  ` \x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00-\x1eU\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00-\x1e\x82\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x00-\x1e\x83\x00\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
@@ -7316,8 +7319,12 @@
 	"\x83\x03\xb7 @\x15\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x03\xb8\ax\x81\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xb8\a\x89\x81\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
+	"\x83\x03\xb8\"\n.\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
+	"\x83\x03\xb8\"\x0e\x90\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xb8\"%d\x00\x00\x00\x00\x00\x00\x00\x02\n\x00\x00" +
 	"\x83\x03\xb8\"'`\x00\x00\x00\x00\x00\x00\x00\x02\n\x00\x00" +
+	"\x83\x03\xb8\"p*\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
+	"\x83\x03\xb8\"\x81B\x00\x00\x00\x00\x00\x00\x00\n\x00\xfc\x00" +
 	"\x83\x03\xbb\x04L\t\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xbb\x04P\t\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xc0\x16\xdf\x05\x00\x00\x00\x00\x00\x00\x00\x03\x00\x00\x00" +
@@ -7708,6 +7715,7 @@
 	"\x83\x03\xd2\x19\x81\x10\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xd2\x19\x81\x11\x00\x00\x00\x00\x00\x00\x00\x02\x06\x00\x00" +
 	"\x83\x03\xd2\x19\x81\x12\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
+	"\x83\x03\xd2\x19\x81\x14\x00\x00\x00\x00\x00\x00\x00\xff\x00\x00\x00" +
 	"\x83\x03\xd2\x19\x81\xff\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xd2\x19\x82\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
 	"\x83\x03\xd2\x19\x82\x10\x00\x00\x00\x00\x00\x00\x00\xff\xff\xff\x00" +
@@ -8057,6 +8065,7 @@
 	"\x03\x00\x00\x00O\x04\x00\x00\x00\xb3\x00\x00" +
 	"\x03\x00\x00\x00O\x04\x00\x00\x04\xb3\x00\x00" +
 	"\x03\x00\x00\x00O\x04\x00\x00\x05\xb6\x00\x00" +
+	"\x03\x00\x00\x00O\x04\x00\x00 \xb3\x00\x00" +
 	"\x03\x00\x00\x00O\x04\x00\x00#\xb3\x00\x00" +
 	"\x03\x00\x00\x00O\x04\x00\x00$\xb3\x00\x00" +
 	"\x03\x00\x00\x00O\x04\x00\x00Q\xb6\x00\x00" +
@@ -8132,14 +8141,19 @@
 	"\x03\x00\x00\x00m\x04\x00\x002\xc5\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x004\xc5\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x009\xc5\x00\x00" +
+	"\x03\x00\x00\x00m\x04\x00\x00:\xc5\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00O\xc2\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00b\xc2\x00\x00" +
-	"\x03\x00\x00\x00m\x04\x00\x00k\xc0\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x81\xc0\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x82\xc0\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x83\xc2\x00\x00" +
+	"\x03\x00\x00\x00m\x04\x00\x00\x86\xc0\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x86\xc2\x00\x00" +
+	"\x03\x00\x00\x00m\x04\x00\x00\x87\xc0\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x87\xc2\x00\x00" +
+	"\x03\x00\x00\x00m\x04\x00\x00\x88\xc0\x00\x00" +
+	"\x03\x00\x00\x00m\x04\x00\x00\x90\xc0\x00\x00" +
+	"\x03\x00\x00\x00m\x04\x00\x00\x91\xc0\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x93\xc2\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x94\xc2\x00\x00" +
 	"\x03\x00\x00\x00m\x04\x00\x00\x95\xc2\x00\x00" +
diff --git a/sys/linux/vusb.txt b/sys/linux/vusb.txt
index 413b372..5a306fc 100644
--- a/sys/linux/vusb.txt
+++ b/sys/linux/vusb.txt
@@ -12,6 +12,8 @@
 include <linux/hid.h>
 include <uapi/linux/usb/cdc.h>
 include <uapi/linux/if_ether.h>
+include <linux/interrupt.h>
+include <linux/usb/cdc_ncm.h>
 include <drivers/net/usb/asix.h>
 
 # This is a special fd for USB fuzzing and should only be used with syz_usb_* syzcalls.
@@ -19,6 +21,8 @@
 resource fd_usb[int32]: -1
 resource fd_usb_hid[fd_usb]
 resource fd_usb_printer[fd_usb]
+resource fd_usb_cdc_ecm[fd_usb]
+resource fd_usb_cdc_ncm[fd_usb]
 
 # These are generic syzcalls for emulating arbitrary USB devices.
 # They are mostly targeted to cover the enumeration process.
@@ -28,14 +32,22 @@
 syz_usb_ep_read(fd fd_usb, ep int16[0:31], len len[data], data buffer[out])
 syz_usb_disconnect(fd fd_usb)
 
-# These are syzcalls that specifically target the HID device class.
+# These syzcalls specifically target the HID device class.
 syz_usb_connect$hid(speed flags[usb_device_speed], dev_len len[dev], dev ptr[in, usb_device_descriptor_hid], conn_descs ptr[in, vusb_connect_descriptors]) fd_usb_hid
 syz_usb_control_io$hid(fd fd_usb_hid, descs ptr[in, vusb_descriptors_hid], resps ptr[in, vusb_responses_hid])
 
-# These are syzcalls that specifically target the PRINTER device class.
+# These syzcalls specifically target the PRINTER device class.
 syz_usb_connect$printer(speed flags[usb_device_speed], dev_len len[dev], dev ptr[in, usb_device_descriptor_printer], conn_descs ptr[in, vusb_connect_descriptors]) fd_usb_printer
 syz_usb_control_io$printer(fd fd_usb_printer, descs ptr[in, vusb_descriptors_printer], resps ptr[in, vusb_responses_printer])
 
+# These syzcalls specifically target the CDC ECM (Ethernet) device class.
+syz_usb_connect$cdc_ecm(speed flags[usb_device_speed], dev_len len[dev], dev ptr[in, usb_device_descriptor_cdc_ecm], conn_descs ptr[in, vusb_connect_descriptors]) fd_usb_cdc_ecm
+syz_usb_control_io$cdc_ecm(fd fd_usb_cdc_ecm, descs ptr[in, vusb_descriptors_cdc_ecm], resps ptr[in, vusb_responses_cdc_ecm])
+
+# These syzcalls specifically target the CDC NCM device class.
+syz_usb_connect$cdc_ncm(speed flags[usb_device_speed], dev_len len[dev], dev ptr[in, usb_device_descriptor_cdc_ncm], conn_descs ptr[in, vusb_connect_descriptors]) fd_usb_cdc_ncm
+syz_usb_control_io$cdc_ncm(fd fd_usb_cdc_ncm, descs ptr[in, vusb_descriptors_cdc_ncm], resps ptr[in, vusb_responses_cdc_ncm])
+
 usb_device_speed = USB_SPEED_UNKNOWN, USB_SPEED_LOW, USB_SPEED_FULL, USB_SPEED_HIGH, USB_SPEED_WIRELESS, USB_SPEED_SUPER, USB_SPEED_SUPER_PLUS
 
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -50,13 +62,13 @@
 	bDeviceClass		const[CLASS, int8]
 	bDeviceSubClass		const[SUBCLASS, int8]
 	bDeviceProtocol		const[PROTOCOL, int8]
-	bMaxPacketSize0		flags[usb_max_packet_sizes, int8]
+	bMaxPacketSize0		flags[usb_device_max_packet_sizes, int8]
 	idVendor		const[VENDOR, int16]
 	idProduct		const[PRODUCT, int16]
 	bcdDevice		const[DEVICE, int16]
-	iManufacturer		int8
-	iProduct		int8
-	iSerialNumber		int8
+	iManufacturer		const[1, int8]
+	iProduct		const[2, int8]
+	iSerialNumber		const[3, int8]
 	bNumConfigurations	len[configs, int8]
 
 	configs			CFS
@@ -65,14 +77,14 @@
 usb_versions = 0x110, 0x200, 0x201, 0x250, 0x300, 0x310
 
 # https://elixir.bootlin.com/linux/v5.1.7/source/drivers/usb/core/hub.c#L4661
-usb_max_packet_sizes = 8, 16, 32, 64
+usb_device_max_packet_sizes = 8, 16, 32, 64, 255
 
-type usb_config_descriptor_t[NUM, ATTRS, IFS] {
+type usb_config_descriptor_t[NUM, IFSNUM, ATTRS, IFS] {
 	bLength			const[USB_DT_CONFIG_SIZE, int8]
 	bDescriptorType		const[USB_DT_CONFIG, int8]
 
 	wTotalLength		len[parent, int16]
-	bNumInterfaces		len[interfaces, int8]
+	bNumInterfaces		IFSNUM
 	bConfigurationValue	NUM
 	iConfiguration		int8
 	bmAttributes		ATTRS
@@ -81,13 +93,15 @@
 	interfaces		IFS
 } [packed]
 
-type usb_interface_descriptor_t[IFNUM, CLASS, SUBCLASS, PROTOCOL, EXTRA, EPS] {
+type usb_config_descriptor_ifaces_array_t[NUM, ATTRS, IFS] usb_config_descriptor_t[NUM, len[interfaces, int8], ATTRS, IFS]
+
+type usb_interface_descriptor_t[IFNUM, ALTNUM, EPSNUM, CLASS, SUBCLASS, PROTOCOL, EXTRA, EPS] {
 	bLength			const[USB_DT_INTERFACE_SIZE, int8]
 	bDescriptorType		const[USB_DT_INTERFACE, int8]
 
 	bInterfaceNumber	IFNUM
-	bAlternateSetting	int8
-	bNumEndpoints		len[endpoints, int8]
+	bAlternateSetting	ALTNUM
+	bNumEndpoints		EPSNUM
 	bInterfaceClass		CLASS
 	bInterfaceSubClass	SUBCLASS
 	bInterfaceProtocol	PROTOCOL
@@ -97,6 +111,8 @@
 	endpoints		EPS
 } [packed]
 
+type usb_interface_descriptor_eps_array_t[IFNUM, ALTNUM, CLASS, SUBCLASS, PROTOCOL, EXTRA, EPS] usb_interface_descriptor_t[IFNUM, ALTNUM, len[endpoints, int8], CLASS, SUBCLASS, PROTOCOL, EXTRA, EPS]
+
 # TODO: Some endpoints have USB_DT_ENDPOINT_SIZE.
 type usb_endpoint_descriptor_t[ADDR, ATTRS, EXTRA] {
 	bLength			const[USB_DT_ENDPOINT_AUDIO_SIZE, int8]
@@ -104,7 +120,7 @@
 
 	bEndpointAddress	ADDR
 	bmAttributes		ATTRS
-	wMaxPacketSize		flags[usb_max_packet_sizes, int16]
+	wMaxPacketSize		int16[0:1024]
 	bInterval		int8
 
 	bRefresh		int8
@@ -119,16 +135,15 @@
 
 # Generic USB device, configuration, interface and endpoint descriptors.
 
-# TODO: support more than one configuration.
+# We only support one configuration per device.
 # bDeviceClass, bDeviceSubClass, bDeviceProtocol, idVendor, idProduct
 # and bcdDevice are patched by Go code, see sys/linux/init_vusb.go.
 usb_device_descriptor {
 	inner	usb_device_descriptor_t[0, 0, 0, 0, 0, 0, array[usb_config_descriptor, 1]]
 } [packed]
 
-# TODO: support more than one interface.
 usb_config_descriptor {
-	inner	usb_config_descriptor_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1]]
+	inner	usb_config_descriptor_ifaces_array_t[int8, flags[usb_config_attributes, int8], array[usb_interface_descriptor, 1:4]]
 } [packed]
 
 usb_config_attributes = USB_CONFIG_ATT_ONE, USB_CONFIG_ATT_SELFPOWER, USB_CONFIG_ATT_WAKEUP, USB_CONFIG_ATT_BATTERY
@@ -136,7 +151,7 @@
 # bInterfaceNumber, bInterfaceClass, bInterfaceSubClass and bInterfaceProtocol
 # are patched by Go code, see sys/linux/init_vusb.go.
 usb_interface_descriptor {
-	inner	usb_interface_descriptor_t[const[0, int8], const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]
+	inner	usb_interface_descriptor_eps_array_t[const[0, int8], int8, const[0, int8], const[0, int8], const[0, int8], array[usb_interface_extra_descriptor, 0:2], array[usb_endpoint_descriptor, 0:16]]
 } [packed]
 
 usb_endpoint_descriptor {
@@ -208,9 +223,6 @@
 	hub_USB_REQ_GET_STATUS_hub	ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_hub_status]]
 	hub_USB_REQ_GET_STATUS_port	ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_REQ_GET_STATUS, usb_port_status]]
 
-# TODO: https://elixir.bootlin.com/linux/v5.2.6/source/include/uapi/linux/usb/cdc.h#L233
-	cdc_USB_CDC_GET_NTB_PARAMETERS	ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]]
-
 	asix_AX_CMD_READ_MII_REG	ptr[in, vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_MII_REG, int16]]
 	asix_AX_CMD_STATMNGSTS_REG	ptr[in, vusb_response_t[USB_TYPE_VENDOR, AX_CMD_STATMNGSTS_REG, int8]]
 	asix_AX_CMD_READ_EEPROM		ptr[in, vusb_response_t[USB_TYPE_VENDOR, AX_CMD_READ_EEPROM, array[int8, 2]]]
@@ -246,14 +258,18 @@
 
 # USB descriptors requested by the kernel before the SET_CONFIGURATION request.
 
-usb_string_descriptor {
+type usb_string_descriptor_t[DATA] {
 	bLength		len[parent, int8]
 	bDescriptorType	const[USB_DT_STRING, int8]
 
-	lang_id		flags[usb_lang_ids, int16]
-	data		array[int8]
+	data		DATA
 } [packed]
 
+usb_string_descriptor [
+	lang_id	usb_string_descriptor_t[flags[usb_lang_ids, int16]]
+	string	usb_string_descriptor_t[array[int8]]
+] [varlen]
+
 usb_lang_ids = 0x436, 0x41c, 0x401, 0x801, 0xc01, 0x1001, 0x1401, 0x1801, 0x1c01, 0x2001, 0x2401, 0x2801, 0x2c01, 0x3001, 0x3401, 0x3801, 0x3c01, 0x4001, 0x42b, 0x44d, 0x42c, 0x82c, 0x42d, 0x423, 0x445, 0x402, 0x455, 0x403, 0x404, 0x804, 0xc04, 0x1004, 0x1404, 0x41a, 0x405, 0x406, 0x413, 0x813, 0x409, 0x809, 0xc09, 0x1009, 0x1409, 0x1809, 0x1c09, 0x2009, 0x2409, 0x2809, 0x2c09, 0x3009, 0x3409, 0x425, 0x438, 0x429, 0x40b, 0x40c, 0x80c, 0xc0c, 0x100c, 0x140c, 0x180c, 0x437, 0x407, 0x807, 0xc07, 0x1007, 0x1407, 0x408, 0x447, 0x40d, 0x439, 0x40e, 0x40f, 0x421, 0x410, 0x810, 0x411, 0x44b, 0x860, 0x43f, 0x457, 0x412, 0x812, 0x426, 0x427, 0x827, 0x42f, 0x43e, 0x83e, 0x44c, 0x458, 0x44e, 0x861, 0x414, 0x814, 0x448, 0x415, 0x416, 0x816, 0x446, 0x418, 0x419, 0x44f, 0xc1a, 0x81a, 0x459, 0x41b, 0x424, 0x40a, 0x80a, 0xc0a, 0x100a, 0x140a, 0x180a, 0x1c0a, 0x200a, 0x240a, 0x280a, 0x2c0a, 0x300a, 0x340a, 0x380a, 0x3c0a, 0x400a, 0x440a, 0x480a, 0x4c0a, 0x500a, 0x430, 0x441, 0x41d, 0x81d, 0x449, 0x444, 0x44a, 0x41e, 0x41f, 0x422, 0x420, 0x820, 0x443, 0x843, 0x42a, 0x4ff, 0xf0ff, 0xf4ff, 0xf8ff, 0xfcff
 
 usb_qualifier_descriptor {
@@ -264,7 +280,7 @@
 	bDeviceClass		int8
 	bDeviceSubClass		int8
 	bDeviceProtocol		int8
-	bMaxPacketSize0		flags[usb_max_packet_sizes, int8]
+	bMaxPacketSize0		flags[usb_device_max_packet_sizes, int8]
 	bNumConfigurations	int8
 	bRESERVED		const[0, int8]
 } [packed]
@@ -384,8 +400,6 @@
 
 # Extra USB descriptors that come after an interface or an endpoint descriptor.
 
-# CHECK: cdc_parse_cdc_header (iface)
-
 # TODO: uas_find_endpoints (endpoint)
 # TODO: rpipe_epc_find (endpoint)
 # TODO: uvc_parse_streaming (iface)
@@ -402,7 +416,7 @@
 usb_interface_extra_descriptor [
 	generic	usb_generic_descriptor
 	hid_hid	usb_hid_descriptor_hid
-	usb_cdc	usb_cdc_header
+	usb_cdc	usb_cdc_header_ethernet
 ] [varlen]
 
 usb_endpoint_extra_descriptor [
@@ -418,176 +432,6 @@
 
 usb_descriptor_types = USB_DT_DEVICE, USB_DT_CONFIG, USB_DT_STRING, USB_DT_INTERFACE, USB_DT_ENDPOINT, USB_DT_DEVICE_QUALIFIER, USB_DT_OTHER_SPEED_CONFIG, USB_DT_INTERFACE_POWER, USB_DT_OTG, USB_DT_DEBUG, USB_DT_INTERFACE_ASSOCIATION, USB_DT_SECURITY, USB_DT_KEY, USB_DT_ENCRYPTION_TYPE, USB_DT_BOS, USB_DT_DEVICE_CAPABILITY, USB_DT_WIRELESS_ENDPOINT_COMP, USB_DT_WIRE_ADAPTER, USB_DT_RPIPE, USB_DT_CS_RADIO_CONTROL, USB_DT_PIPE_USAGE, USB_DT_SS_ENDPOINT_COMP, USB_DT_SSP_ISOC_ENDPOINT_COMP, HID_DT_HID, HID_DT_REPORT, HID_DT_PHYSICAL
 
-usb_cdc_header {
-	items	array[usb_cdc_header_item, 0:16]
-} [packed]
-
-usb_cdc_header_item [
-	generic			usb_cdc_generic
-	header			usb_cdc_header_desc
-	call_mgmt		usb_cdc_call_mgmt_descriptor
-	acm			usb_cdc_acm_descriptor
-	union			usb_cdc_union_desc
-	country_functional	usb_cdc_country_functional_desc
-	network_terminal	usb_cdc_network_terminal_desc
-	ether			usb_cdc_ether_desc
-	dmm			usb_cdc_dmm_desc
-	mdlm			usb_cdc_mdlm_desc
-	mdlm_detail		usb_cdc_mdlm_detail_desc
-	obex			usb_cdc_obex_desc
-	ncm			usb_cdc_ncm_desc
-	mbim			usb_cdc_mbim_desc
-	mbim_extended		usb_cdc_mbim_extended_desc
-] [varlen]
-
-usb_cdc_generic {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	flags[usb_cdc_types, int8]
-
-	data			array[int8]
-} [packed]
-
-usb_cdc_types = USB_CDC_HEADER_TYPE, USB_CDC_CALL_MANAGEMENT_TYPE, USB_CDC_ACM_TYPE, USB_CDC_UNION_TYPE, USB_CDC_COUNTRY_TYPE, USB_CDC_NETWORK_TERMINAL_TYPE, USB_CDC_ETHERNET_TYPE, USB_CDC_WHCM_TYPE, USB_CDC_MDLM_TYPE, USB_CDC_MDLM_DETAIL_TYPE, USB_CDC_DMM_TYPE, USB_CDC_OBEX_TYPE, USB_CDC_NCM_TYPE, USB_CDC_MBIM_TYPE, USB_CDC_MBIM_EXTENDED_TYPE
-
-usb_cdc_header_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_HEADER_TYPE, int8]
-
-	bcdCDC			int16
-} [packed]
-
-usb_cdc_call_mgmt_descriptor {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_CALL_MANAGEMENT_TYPE, int8]
-
-	bmCapabilities		flags[usb_cdc_call_mgmt_caps, int8]
-} [packed]
-
-usb_cdc_call_mgmt_caps = USB_CDC_CALL_MGMT_CAP_CALL_MGMT, USB_CDC_CALL_MGMT_CAP_DATA_INTF
-
-usb_cdc_acm_descriptor {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_ACM_TYPE, int8]
-
-	bmCapabilities		flags[usb_cdc_acm_caps, int8]
-} [packed]
-
-usb_cdc_acm_caps = USB_CDC_COMM_FEATURE, USB_CDC_CAP_LINE, USB_CDC_CAP_BRK, USB_CDC_CAP_NOTIFY
-
-usb_cdc_union_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_UNION_TYPE, int8]
-
-	bMasterInterface0	int8
-	bSlaveInterface0	int8
-	slave_interfaces	array[int8, 0:6]
-} [packed]
-
-usb_cdc_country_functional_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_COUNTRY_TYPE, int8]
-
-	iCountryCodeRelDate	int8
-	wCountyCode0		int16
-	country_codes		array[int16, 0:6]
-} [packed]
-
-usb_cdc_network_terminal_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_NETWORK_TERMINAL_TYPE, int8]
-
-	bEntityId		int8
-	iName			int8
-	bChannelIndex		int8
-	bPhysicalInterface	int8
-} [packed]
-
-usb_cdc_ether_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_ETHERNET_TYPE, int8]
-
-	iMACAddress		int8
-	bmEthernetStatistics	int32
-	wMaxSegmentSize		int16
-	wNumberMCFilters	int16
-	bNumberPowerFilters	int8
-} [packed]
-
-usb_cdc_dmm_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_DMM_TYPE, int8]
-
-	bcdVersion		int16
-	wMaxCommand		int16
-} [packed]
-
-usb_cdc_mdlm_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_MDLM_TYPE, int8]
-
-	bcdVersion		int16
-	bGUID			array[int8, 16]
-} [packed]
-
-usb_cdc_mdlm_detail_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_MDLM_DETAIL_TYPE, int8]
-
-	bGuidDescriptorType	int8
-	bDetailData		array[int8]
-} [packed]
-
-usb_cdc_obex_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_OBEX_TYPE, int8]
-
-	bcdVersion		int16
-} [packed]
-
-usb_cdc_ncm_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_NCM_TYPE, int8]
-
-	bcdNcmVersion		int16
-	bmNetworkCapabilities	int8
-} [packed]
-
-usb_cdc_mbim_desc {
-	bLength			len[parent, int8]
-	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType	const[USB_CDC_MBIM_TYPE, int8]
-
-	bcdMBIMVersion		int16
-	wMaxControlMessage	int16
-	bNumberFilters		int8
-	bMaxFilterSize		int8
-	wMaxSegmentSize		int16
-	bmNetworkCapabilities	int8
-} [packed]
-
-usb_cdc_mbim_extended_desc {
-	bLength				len[parent, int8]
-	bDescriptorType			const[USB_DT_CS_INTERFACE, int8]
-	bDescriptorSubType		const[USB_CDC_MBIM_EXTENDED_TYPE, int8]
-
-	bcdMBIMExtendedVersion		int16
-	bMaxOutstandingCommandMessages	int8
-	wMTU				int16
-} [packed]
-
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -652,21 +496,6 @@
 
 usb_hub_change_flags = HUB_CHANGE_LOCAL_POWER, HUB_CHANGE_OVERCURRENT
 
-usb_cdc_ncm_ntb_parameters {
-	wLength			int16
-	bmNtbFormatsSupported	int16
-	dwNtbInMaxSize		int32
-	wNdpInDivisor		int16
-	wNdpInPayloadRemainder	int16
-	wNdpInAlignment		int16
-	wPadding1		int16
-	dwNtbOutMaxSize		int32
-	wNdpOutDivisor		int16
-	wNdpOutPayloadRemainder	int16
-	wNdpOutAlignment	int16
-	wNtbOutMaxDatagrams	int16
-} [packed]
-
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
@@ -687,11 +516,11 @@
 } [packed]
 
 usb_config_descriptor_hid {
-	inner	usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]
+	inner	usb_config_descriptor_ifaces_array_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_hid, 1]]
 } [packed]
 
 usb_interface_descriptor_hid {
-	inner	usb_interface_descriptor_t[int8, const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]
+	inner	usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_HID, int8], const[USB_INTERFACE_SUBCLASS_BOOT, int8], flags[usb_hid_protocols, int8], usb_hid_descriptor_hid, usb_endpoint_descriptors_hid]
 } [packed]
 
 usb_hid_protocols = 0, USB_INTERFACE_PROTOCOL_KEYBOARD, USB_INTERFACE_PROTOCOL_MOUSE
@@ -733,7 +562,7 @@
 	USB_REQ_GET_CONFIGURATION	ptr[in, vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]]
 
 	HID_REQ_GET_REPORT		ptr[in, vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, array[int8]]]
-	HID_REQ_GET_PROTOCOL		ptr[in, vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_REPORT, int8]]
+	HID_REQ_GET_PROTOCOL		ptr[in, vusb_response_t[USB_TYPE_CLASS, HID_REQ_GET_PROTOCOL, int8]]
 } [packed]
 
 # USB HID specifications allows for multiple report and physical descriptors
@@ -817,15 +646,15 @@
 
 # TODO: consider patching idVendor and idProduct in Go code.
 usb_device_descriptor_printer {
-	inner	usb_device_descriptor_t[0, 0, 0, 0x3f0, 0x6c17, 64, array[usb_config_descriptor_printer, 1]]
+	inner	usb_device_descriptor_t[0, 0, 0, 0x525, 0xa4a8, 64, array[usb_config_descriptor_printer, 1]]
 } [packed]
 
 usb_config_descriptor_printer {
-	inner	usb_config_descriptor_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]
+	inner	usb_config_descriptor_ifaces_array_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_printer, 1]]
 } [packed]
 
 usb_interface_descriptor_printer {
-	inner	usb_interface_descriptor_t[int8, const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]
+	inner	usb_interface_descriptor_t[const[0, int8], int8, int8[1:2], const[USB_CLASS_PRINTER, int8], const[1, int8], int8[USBLP_FIRST_PROTOCOL:USBLP_LAST_PROTOCOL], void, usb_endpoint_descriptors_printer]
 } [packed]
 
 usb_endpoint_descriptors_printer {
@@ -841,7 +670,7 @@
 	inner	usb_endpoint_descriptor_t[const[USB_ENDPOINT_PRINTER_IN_ADDRESS, int8], const[USB_ENDPOINT_PRINTER_ATTRIBUTES, int8], void]
 } [packed]
 
-define USB_ENDPOINT_PRINTER_ATTRIBUTES	(USB_ENDPOINT_XFER_BULK | USB_ENDPOINT_SYNC_NONE | USB_ENDPOINT_USAGE_DATA)
+define USB_ENDPOINT_PRINTER_ATTRIBUTES	(USB_ENDPOINT_XFER_BULK)
 define USB_ENDPOINT_PRINTER_OUT_ADDRESS	(1)
 define USB_ENDPOINT_PRINTER_IN_ADDRESS	(2 | USB_DIR_IN)
 
@@ -872,3 +701,346 @@
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
 # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+# CDC ECM (Ethernet) device class specific descriptions.
+# https://www.usb.org/document-library/class-definitions-communication-devices-12
+# https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/cdc_ether.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/usbnet.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/usb/gadget/legacy/ether.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/usb/gadget/function/f_ecm.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/usb/gadget/function/u_ether.c
+
+# Connected CDC ECM devices are known to create usbN network interfaces.
+# TODO: enable fuzzing of those.
+
+# TODO: currently the only endpoint which is being successfully enabled is the notification endpoint #1.
+
+# TODO: consider patching idVendor and idProduct in Go code.
+usb_device_descriptor_cdc_ecm {
+	inner	usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ecm, 1]]
+} [packed]
+
+usb_config_descriptor_cdc_ecm {
+	inner	usb_config_descriptor_ifaces_array_t[const[1, int8], flags[usb_config_attributes, int8], array[usb_interface_descriptor_cdc_ecm, 1]]
+} [packed]
+
+# Per specification CDC ECM devices have two interfaces (control and data),
+# but here we're merging them into one for simplicity since Linux supports that.
+usb_interface_descriptor_cdc_ecm {
+	inner	usb_interface_descriptor_t[const[0, int8], int8, int8[2:3], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_ETHERNET, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ethernet, usb_endpoint_descriptors_cdc_ecm]
+} [packed]
+
+usb_endpoint_descriptors_cdc_ecm {
+	notify	array[usb_endpoint_descriptor_cdc_ecm_notify, 0:1]
+	in	usb_endpoint_descriptor_cdc_ecm_in
+	out	usb_endpoint_descriptor_cdc_ecm_out
+} [packed]
+
+usb_endpoint_descriptor_cdc_ecm_notify {
+	inner	usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES, int8], void]
+} [packed]
+
+usb_endpoint_descriptor_cdc_ecm_in {
+	inner	usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_IN_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]
+} [packed]
+
+usb_endpoint_descriptor_cdc_ecm_out {
+	inner	usb_endpoint_descriptor_t[const[USB_ENDPOINT_CDC_ECM_OUT_ADDRESS, int8], const[USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES, int8], void]
+} [packed]
+
+define USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES	(USB_ENDPOINT_XFER_INT)
+define USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES	(USB_ENDPOINT_XFER_BULK)
+define USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS	(1 | USB_DIR_IN)
+define USB_ENDPOINT_CDC_ECM_IN_ADDRESS	(2 | USB_DIR_IN)
+define USB_ENDPOINT_CDC_ECM_OUT_ADDRESS	(3)
+
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/usb/core/message.c#L2137
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/net/usb/cdc_ether.c#L155
+usb_cdc_header_ethernet {
+	union	usb_cdc_union_desc_t[0, 0]
+	header	usb_cdc_header_desc
+	ether	usb_cdc_ether_desc
+
+	other	array[usb_cdc_header_ethernet_other, 0:6]
+} [packed]
+
+usb_cdc_header_ethernet_other [
+	call_mgmt		usb_cdc_call_mgmt_descriptor
+	acm			usb_cdc_acm_descriptor
+	country_functional	usb_cdc_country_functional_desc
+	network_terminal	usb_cdc_network_terminal_desc
+	dmm			usb_cdc_dmm_desc
+	mdlm			usb_cdc_mdlm_desc
+	mdlm_detail		usb_cdc_mdlm_detail_desc
+	obex			usb_cdc_obex_desc
+	ncm			usb_cdc_ncm_desc
+	mbim			usb_cdc_mbim_desc
+	mbim_extended		usb_cdc_mbim_extended_desc
+] [varlen]
+
+usb_cdc_header_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_HEADER_TYPE, int8]
+
+	bcdCDC			int16
+} [packed]
+
+usb_cdc_call_mgmt_descriptor {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_CALL_MANAGEMENT_TYPE, int8]
+
+	bmCapabilities		flags[usb_cdc_call_mgmt_caps, int8]
+	bDataInterface		int8
+} [packed]
+
+usb_cdc_call_mgmt_caps = USB_CDC_CALL_MGMT_CAP_CALL_MGMT, USB_CDC_CALL_MGMT_CAP_DATA_INTF
+
+usb_cdc_acm_descriptor {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_ACM_TYPE, int8]
+
+	bmCapabilities		flags[usb_cdc_acm_caps, int8]
+} [packed]
+
+usb_cdc_acm_caps = USB_CDC_COMM_FEATURE, USB_CDC_CAP_LINE, USB_CDC_CAP_BRK, USB_CDC_CAP_NOTIFY
+
+type usb_cdc_union_desc_t[MASTER, SLAVE] {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_UNION_TYPE, int8]
+
+	bMasterInterface0	const[MASTER, int8]
+	bSlaveInterface0	const[SLAVE, int8]
+	slave_interfaces	array[int8, 0:6]
+} [packed]
+
+usb_cdc_country_functional_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_COUNTRY_TYPE, int8]
+
+	iCountryCodeRelDate	int8
+	wCountyCode0		int16
+	country_codes		array[int16, 0:6]
+} [packed]
+
+usb_cdc_network_terminal_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_NETWORK_TERMINAL_TYPE, int8]
+
+	bEntityId		int8
+	iName			int8
+	bChannelIndex		int8
+	bPhysicalInterface	int8
+} [packed]
+
+usb_cdc_ether_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_ETHERNET_TYPE, int8]
+
+	iMACAddress		const[1, int8]
+	bmEthernetStatistics	int32
+	wMaxSegmentSize		int16
+	wNumberMCFilters	int16
+	bNumberPowerFilters	int8
+} [packed]
+
+usb_cdc_dmm_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_DMM_TYPE, int8]
+
+	bcdVersion		int16
+	wMaxCommand		int16
+} [packed]
+
+usb_cdc_mdlm_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_MDLM_TYPE, int8]
+
+	bcdVersion		int16
+	bGUID			usb_cdc_ecm_mbm_guid
+} [packed]
+
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/net/usb/cdc_ether.c#L61
+usb_cdc_ecm_mbm_guid {
+	id0	const[0x14f5e048ba817a3, int64]
+	id1	const[0x2a397ecbffc007a6, int64]
+} [packed]
+
+usb_cdc_mdlm_detail_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_MDLM_DETAIL_TYPE, int8]
+
+	bGuidDescriptorType	int8
+	bDetailData		array[int8]
+} [packed]
+
+usb_cdc_obex_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_OBEX_TYPE, int8]
+
+	bcdVersion		int16
+} [packed]
+
+usb_cdc_ncm_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_NCM_TYPE, int8]
+
+	bcdNcmVersion		int16
+	bmNetworkCapabilities	int8
+} [packed]
+
+usb_cdc_mbim_desc {
+	bLength			len[parent, int8]
+	bDescriptorType		const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType	const[USB_CDC_MBIM_TYPE, int8]
+
+	bcdMBIMVersion		int16
+	wMaxControlMessage	int16
+	bNumberFilters		int8
+	bMaxFilterSize		int8
+	wMaxSegmentSize		int16
+	bmNetworkCapabilities	int8
+} [packed]
+
+usb_cdc_mbim_extended_desc {
+	bLength				len[parent, int8]
+	bDescriptorType			const[USB_DT_CS_INTERFACE, int8]
+	bDescriptorSubType		const[USB_CDC_MBIM_EXTENDED_TYPE, int8]
+
+	bcdMBIMExtendedVersion		int16
+	bMaxOutstandingCommandMessages	int8
+	wMTU				int16
+} [packed]
+
+vusb_descriptors_cdc_ecm {
+	len		len[parent, int32]
+	generic		ptr[in, vusb_descriptor_generic]
+
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/net/usb/usbnet.c#L147
+	USB_DT_STRING	ptr[in, vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]]
+} [packed]
+
+usb_cdc_ecm_mac {
+# This is a UTF16 encoded string "424242424242".
+	data0	const[0x3400320034003200, int64be]
+	data1	const[0x3400320034003200, int64be]
+	data2	const[0x3400320034003200, int64be]
+} [packed]
+
+vusb_responses_cdc_ecm {
+	len				len[parent, int32]
+	generic				ptr[in, vusb_response_generic]
+
+	USB_REQ_GET_INTERFACE		ptr[in, vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]]
+	USB_REQ_GET_CONFIGURATION	ptr[in, vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]]
+} [packed]
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+
+# CDC NCM class specific descriptions.
+# CDC NCM is based on CDC ECM, so some of the descriptions are reused.
+# https://www.usb.org/document-library/network-control-model-devices-specification-v10-and-errata-and-adopters-agreement
+# https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/cdc_ncm.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/net/usb/usbnet.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/usb/gadget/legacy/ncm.c
+# https://elixir.bootlin.com/linux/latest/source/drivers/usb/gadget/function/f_ncm.c
+
+# TODO: currently the only endpoint which is being successfully enabled is the notification endpoint #1.
+
+# TODO: consider patching idVendor and idProduct in Go code.
+usb_device_descriptor_cdc_ncm {
+	inner	usb_device_descriptor_t[USB_CLASS_COMM, 0, 0, 0x525, 0xa4a1, 64, array[usb_config_descriptor_cdc_ncm, 1]]
+} [packed]
+
+usb_config_descriptor_cdc_ncm {
+	inner	usb_config_descriptor_t[const[1, int8], const[2, int8], flags[usb_config_attributes, int8], usb_interface_descriptors_cdc_ncm]
+} [packed]
+
+usb_interface_descriptors_cdc_ncm {
+	control		usb_interface_descriptor_t[const[0, int8], const[CDC_NCM_COMM_ALTSETTING_NCM, int8], const[1, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], usb_cdc_header_ncm, usb_endpoint_descriptor_cdc_ecm_notify]
+	data_nop	usb_interface_descriptor_t[const[1, int8], const[0, int8], const[0, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, void]
+	data		usb_interface_descriptor_t[const[1, int8], const[CDC_NCM_DATA_ALTSETTING_NCM, int8], const[2, int8], const[USB_CLASS_COMM, int8], const[USB_CDC_SUBCLASS_NCM, int8], const[USB_CDC_PROTO_NONE, int8], void, usb_endpoint_descriptors_cdc_ncm_data]
+} [packed]
+
+usb_endpoint_descriptors_cdc_ncm_data {
+	in	usb_endpoint_descriptor_cdc_ecm_in
+	out	usb_endpoint_descriptor_cdc_ecm_out
+} [packed]
+
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/usb/core/message.c#L2137
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/net/usb/cdc_ncm.c#L798
+usb_cdc_header_ncm {
+	union	usb_cdc_union_desc_t[0, 1]
+	header	usb_cdc_header_desc
+	ether	usb_cdc_ether_desc
+	ncm	usb_cdc_ncm_desc
+
+	other	array[usb_cdc_header_ncm_other, 0:6]
+} [packed]
+
+usb_cdc_header_ncm_other [
+	call_mgmt		usb_cdc_call_mgmt_descriptor
+	acm			usb_cdc_acm_descriptor
+	country_functional	usb_cdc_country_functional_desc
+	network_terminal	usb_cdc_network_terminal_desc
+	dmm			usb_cdc_dmm_desc
+	mdlm			usb_cdc_mdlm_desc
+	mdlm_detail		usb_cdc_mdlm_detail_desc
+	obex			usb_cdc_obex_desc
+	mbim			usb_cdc_mbim_desc
+	mbim_extended		usb_cdc_mbim_extended_desc
+] [varlen]
+
+vusb_descriptors_cdc_ncm {
+	len		len[parent, int32]
+	generic		ptr[in, vusb_descriptor_generic]
+
+# https://elixir.bootlin.com/linux/v5.2.7/source/drivers/net/usb/usbnet.c#L147
+	USB_DT_STRING	ptr[in, vusb_descriptor_t[USB_TYPE_STANDARD, USB_DT_STRING, usb_string_descriptor_t[usb_cdc_ecm_mac]]]
+} [packed]
+
+vusb_responses_cdc_ncm {
+	len				len[parent, int32]
+	generic				ptr[in, vusb_response_generic]
+
+	USB_REQ_GET_INTERFACE		ptr[in, vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_INTERFACE, int8]]
+	USB_REQ_GET_CONFIGURATION	ptr[in, vusb_response_t[USB_TYPE_STANDARD, USB_REQ_GET_CONFIGURATION, int8]]
+
+	USB_CDC_GET_NTB_PARAMETERS	ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_PARAMETERS, usb_cdc_ncm_ntb_parameters]]
+	USB_CDC_GET_NTB_INPUT_SIZE	ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_INPUT_SIZE, int32]]
+	USB_CDC_GET_NTB_FORMAT		ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_NTB_FORMAT, int16[0:1]]]
+	USB_CDC_GET_MAX_DATAGRAM_SIZE	ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_MAX_DATAGRAM_SIZE, int16]]
+	USB_CDC_GET_CRC_MODE		ptr[in, vusb_response_t[USB_TYPE_CLASS, USB_CDC_GET_CRC_MODE, int16[0:1]]]
+} [packed]
+
+usb_cdc_ncm_ntb_parameters {
+	wLength			int16
+	bmNtbFormatsSupported	int16
+	dwNtbInMaxSize		int32
+	wNdpInDivisor		int16
+	wNdpInPayloadRemainder	int16
+	wNdpInAlignment		int16
+	wPadding1		int16
+	dwNtbOutMaxSize		int32
+	wNdpOutDivisor		int16
+	wNdpOutPayloadRemainder	int16
+	wNdpOutAlignment	int16
+	wNtbOutMaxDatagrams	int16
+} [packed]
+
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
+# # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # # #
diff --git a/sys/linux/vusb_386.const b/sys/linux/vusb_386.const
index 7d607df..0928f05 100644
--- a/sys/linux/vusb_386.const
+++ b/sys/linux/vusb_386.const
@@ -10,6 +10,8 @@
 AX_CMD_READ_RX_CTL = 15
 AX_CMD_STATMNGSTS_REG = 9
 AX_CMD_SW_PHY_STATUS = 33
+CDC_NCM_COMM_ALTSETTING_NCM = 0
+CDC_NCM_DATA_ALTSETTING_NCM = 1
 CONTAINER_ID_TYPE = 4
 HID_DT_HID = 33
 HID_DT_PHYSICAL = 35
@@ -45,6 +47,7 @@
 HID_MAIN_ITEM_TAG_INPUT = 8
 HID_MAIN_ITEM_TAG_OUTPUT = 9
 HID_MAX_DESCRIPTOR_SIZE = 4096
+HID_REQ_GET_PROTOCOL = 3
 HID_REQ_GET_REPORT = 1
 HUB_CHANGE_LOCAL_POWER = 1
 HUB_CHANGE_OVERCURRENT = 2
@@ -89,6 +92,10 @@
 USB_CDC_COUNTRY_TYPE = 7
 USB_CDC_DMM_TYPE = 20
 USB_CDC_ETHERNET_TYPE = 15
+USB_CDC_GET_CRC_MODE = 137
+USB_CDC_GET_MAX_DATAGRAM_SIZE = 135
+USB_CDC_GET_NTB_FORMAT = 131
+USB_CDC_GET_NTB_INPUT_SIZE = 133
 USB_CDC_GET_NTB_PARAMETERS = 128
 USB_CDC_HEADER_TYPE = 0
 USB_CDC_MBIM_EXTENDED_TYPE = 28
@@ -98,8 +105,11 @@
 USB_CDC_NCM_TYPE = 26
 USB_CDC_NETWORK_TERMINAL_TYPE = 10
 USB_CDC_OBEX_TYPE = 21
+USB_CDC_PROTO_NONE = 0
+USB_CDC_SUBCLASS_ETHERNET = 6
+USB_CDC_SUBCLASS_NCM = 13
 USB_CDC_UNION_TYPE = 6
-USB_CDC_WHCM_TYPE = 17
+USB_CLASS_COMM = 2
 USB_CLASS_HID = 3
 USB_CLASS_PRINTER = 7
 USB_CONFIG_ATT_BATTERY = 16
@@ -139,6 +149,11 @@
 USB_DT_STRING = 3
 USB_DT_WIRELESS_ENDPOINT_COMP = 17
 USB_DT_WIRE_ADAPTER = 33
+USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES = 2
+USB_ENDPOINT_CDC_ECM_IN_ADDRESS = 130
+USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS = 129
+USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES = 3
+USB_ENDPOINT_CDC_ECM_OUT_ADDRESS = 3
 USB_ENDPOINT_HID_ATTRIBUTES = 3
 USB_ENDPOINT_HID_IN_ADDRESS = 129
 USB_ENDPOINT_HID_OUT_ADDRESS = 2
diff --git a/sys/linux/vusb_amd64.const b/sys/linux/vusb_amd64.const
index 7d607df..0928f05 100644
--- a/sys/linux/vusb_amd64.const
+++ b/sys/linux/vusb_amd64.const
@@ -10,6 +10,8 @@
 AX_CMD_READ_RX_CTL = 15
 AX_CMD_STATMNGSTS_REG = 9
 AX_CMD_SW_PHY_STATUS = 33
+CDC_NCM_COMM_ALTSETTING_NCM = 0
+CDC_NCM_DATA_ALTSETTING_NCM = 1
 CONTAINER_ID_TYPE = 4
 HID_DT_HID = 33
 HID_DT_PHYSICAL = 35
@@ -45,6 +47,7 @@
 HID_MAIN_ITEM_TAG_INPUT = 8
 HID_MAIN_ITEM_TAG_OUTPUT = 9
 HID_MAX_DESCRIPTOR_SIZE = 4096
+HID_REQ_GET_PROTOCOL = 3
 HID_REQ_GET_REPORT = 1
 HUB_CHANGE_LOCAL_POWER = 1
 HUB_CHANGE_OVERCURRENT = 2
@@ -89,6 +92,10 @@
 USB_CDC_COUNTRY_TYPE = 7
 USB_CDC_DMM_TYPE = 20
 USB_CDC_ETHERNET_TYPE = 15
+USB_CDC_GET_CRC_MODE = 137
+USB_CDC_GET_MAX_DATAGRAM_SIZE = 135
+USB_CDC_GET_NTB_FORMAT = 131
+USB_CDC_GET_NTB_INPUT_SIZE = 133
 USB_CDC_GET_NTB_PARAMETERS = 128
 USB_CDC_HEADER_TYPE = 0
 USB_CDC_MBIM_EXTENDED_TYPE = 28
@@ -98,8 +105,11 @@
 USB_CDC_NCM_TYPE = 26
 USB_CDC_NETWORK_TERMINAL_TYPE = 10
 USB_CDC_OBEX_TYPE = 21
+USB_CDC_PROTO_NONE = 0
+USB_CDC_SUBCLASS_ETHERNET = 6
+USB_CDC_SUBCLASS_NCM = 13
 USB_CDC_UNION_TYPE = 6
-USB_CDC_WHCM_TYPE = 17
+USB_CLASS_COMM = 2
 USB_CLASS_HID = 3
 USB_CLASS_PRINTER = 7
 USB_CONFIG_ATT_BATTERY = 16
@@ -139,6 +149,11 @@
 USB_DT_STRING = 3
 USB_DT_WIRELESS_ENDPOINT_COMP = 17
 USB_DT_WIRE_ADAPTER = 33
+USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES = 2
+USB_ENDPOINT_CDC_ECM_IN_ADDRESS = 130
+USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS = 129
+USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES = 3
+USB_ENDPOINT_CDC_ECM_OUT_ADDRESS = 3
 USB_ENDPOINT_HID_ATTRIBUTES = 3
 USB_ENDPOINT_HID_IN_ADDRESS = 129
 USB_ENDPOINT_HID_OUT_ADDRESS = 2
diff --git a/sys/linux/vusb_arm.const b/sys/linux/vusb_arm.const
index 7d607df..0928f05 100644
--- a/sys/linux/vusb_arm.const
+++ b/sys/linux/vusb_arm.const
@@ -10,6 +10,8 @@
 AX_CMD_READ_RX_CTL = 15
 AX_CMD_STATMNGSTS_REG = 9
 AX_CMD_SW_PHY_STATUS = 33
+CDC_NCM_COMM_ALTSETTING_NCM = 0
+CDC_NCM_DATA_ALTSETTING_NCM = 1
 CONTAINER_ID_TYPE = 4
 HID_DT_HID = 33
 HID_DT_PHYSICAL = 35
@@ -45,6 +47,7 @@
 HID_MAIN_ITEM_TAG_INPUT = 8
 HID_MAIN_ITEM_TAG_OUTPUT = 9
 HID_MAX_DESCRIPTOR_SIZE = 4096
+HID_REQ_GET_PROTOCOL = 3
 HID_REQ_GET_REPORT = 1
 HUB_CHANGE_LOCAL_POWER = 1
 HUB_CHANGE_OVERCURRENT = 2
@@ -89,6 +92,10 @@
 USB_CDC_COUNTRY_TYPE = 7
 USB_CDC_DMM_TYPE = 20
 USB_CDC_ETHERNET_TYPE = 15
+USB_CDC_GET_CRC_MODE = 137
+USB_CDC_GET_MAX_DATAGRAM_SIZE = 135
+USB_CDC_GET_NTB_FORMAT = 131
+USB_CDC_GET_NTB_INPUT_SIZE = 133
 USB_CDC_GET_NTB_PARAMETERS = 128
 USB_CDC_HEADER_TYPE = 0
 USB_CDC_MBIM_EXTENDED_TYPE = 28
@@ -98,8 +105,11 @@
 USB_CDC_NCM_TYPE = 26
 USB_CDC_NETWORK_TERMINAL_TYPE = 10
 USB_CDC_OBEX_TYPE = 21
+USB_CDC_PROTO_NONE = 0
+USB_CDC_SUBCLASS_ETHERNET = 6
+USB_CDC_SUBCLASS_NCM = 13
 USB_CDC_UNION_TYPE = 6
-USB_CDC_WHCM_TYPE = 17
+USB_CLASS_COMM = 2
 USB_CLASS_HID = 3
 USB_CLASS_PRINTER = 7
 USB_CONFIG_ATT_BATTERY = 16
@@ -139,6 +149,11 @@
 USB_DT_STRING = 3
 USB_DT_WIRELESS_ENDPOINT_COMP = 17
 USB_DT_WIRE_ADAPTER = 33
+USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES = 2
+USB_ENDPOINT_CDC_ECM_IN_ADDRESS = 130
+USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS = 129
+USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES = 3
+USB_ENDPOINT_CDC_ECM_OUT_ADDRESS = 3
 USB_ENDPOINT_HID_ATTRIBUTES = 3
 USB_ENDPOINT_HID_IN_ADDRESS = 129
 USB_ENDPOINT_HID_OUT_ADDRESS = 2
diff --git a/sys/linux/vusb_arm64.const b/sys/linux/vusb_arm64.const
index 7d607df..0928f05 100644
--- a/sys/linux/vusb_arm64.const
+++ b/sys/linux/vusb_arm64.const
@@ -10,6 +10,8 @@
 AX_CMD_READ_RX_CTL = 15
 AX_CMD_STATMNGSTS_REG = 9
 AX_CMD_SW_PHY_STATUS = 33
+CDC_NCM_COMM_ALTSETTING_NCM = 0
+CDC_NCM_DATA_ALTSETTING_NCM = 1
 CONTAINER_ID_TYPE = 4
 HID_DT_HID = 33
 HID_DT_PHYSICAL = 35
@@ -45,6 +47,7 @@
 HID_MAIN_ITEM_TAG_INPUT = 8
 HID_MAIN_ITEM_TAG_OUTPUT = 9
 HID_MAX_DESCRIPTOR_SIZE = 4096
+HID_REQ_GET_PROTOCOL = 3
 HID_REQ_GET_REPORT = 1
 HUB_CHANGE_LOCAL_POWER = 1
 HUB_CHANGE_OVERCURRENT = 2
@@ -89,6 +92,10 @@
 USB_CDC_COUNTRY_TYPE = 7
 USB_CDC_DMM_TYPE = 20
 USB_CDC_ETHERNET_TYPE = 15
+USB_CDC_GET_CRC_MODE = 137
+USB_CDC_GET_MAX_DATAGRAM_SIZE = 135
+USB_CDC_GET_NTB_FORMAT = 131
+USB_CDC_GET_NTB_INPUT_SIZE = 133
 USB_CDC_GET_NTB_PARAMETERS = 128
 USB_CDC_HEADER_TYPE = 0
 USB_CDC_MBIM_EXTENDED_TYPE = 28
@@ -98,8 +105,11 @@
 USB_CDC_NCM_TYPE = 26
 USB_CDC_NETWORK_TERMINAL_TYPE = 10
 USB_CDC_OBEX_TYPE = 21
+USB_CDC_PROTO_NONE = 0
+USB_CDC_SUBCLASS_ETHERNET = 6
+USB_CDC_SUBCLASS_NCM = 13
 USB_CDC_UNION_TYPE = 6
-USB_CDC_WHCM_TYPE = 17
+USB_CLASS_COMM = 2
 USB_CLASS_HID = 3
 USB_CLASS_PRINTER = 7
 USB_CONFIG_ATT_BATTERY = 16
@@ -139,6 +149,11 @@
 USB_DT_STRING = 3
 USB_DT_WIRELESS_ENDPOINT_COMP = 17
 USB_DT_WIRE_ADAPTER = 33
+USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES = 2
+USB_ENDPOINT_CDC_ECM_IN_ADDRESS = 130
+USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS = 129
+USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES = 3
+USB_ENDPOINT_CDC_ECM_OUT_ADDRESS = 3
 USB_ENDPOINT_HID_ATTRIBUTES = 3
 USB_ENDPOINT_HID_IN_ADDRESS = 129
 USB_ENDPOINT_HID_OUT_ADDRESS = 2
diff --git a/sys/linux/vusb_ppc64le.const b/sys/linux/vusb_ppc64le.const
index 7d607df..0928f05 100644
--- a/sys/linux/vusb_ppc64le.const
+++ b/sys/linux/vusb_ppc64le.const
@@ -10,6 +10,8 @@
 AX_CMD_READ_RX_CTL = 15
 AX_CMD_STATMNGSTS_REG = 9
 AX_CMD_SW_PHY_STATUS = 33
+CDC_NCM_COMM_ALTSETTING_NCM = 0
+CDC_NCM_DATA_ALTSETTING_NCM = 1
 CONTAINER_ID_TYPE = 4
 HID_DT_HID = 33
 HID_DT_PHYSICAL = 35
@@ -45,6 +47,7 @@
 HID_MAIN_ITEM_TAG_INPUT = 8
 HID_MAIN_ITEM_TAG_OUTPUT = 9
 HID_MAX_DESCRIPTOR_SIZE = 4096
+HID_REQ_GET_PROTOCOL = 3
 HID_REQ_GET_REPORT = 1
 HUB_CHANGE_LOCAL_POWER = 1
 HUB_CHANGE_OVERCURRENT = 2
@@ -89,6 +92,10 @@
 USB_CDC_COUNTRY_TYPE = 7
 USB_CDC_DMM_TYPE = 20
 USB_CDC_ETHERNET_TYPE = 15
+USB_CDC_GET_CRC_MODE = 137
+USB_CDC_GET_MAX_DATAGRAM_SIZE = 135
+USB_CDC_GET_NTB_FORMAT = 131
+USB_CDC_GET_NTB_INPUT_SIZE = 133
 USB_CDC_GET_NTB_PARAMETERS = 128
 USB_CDC_HEADER_TYPE = 0
 USB_CDC_MBIM_EXTENDED_TYPE = 28
@@ -98,8 +105,11 @@
 USB_CDC_NCM_TYPE = 26
 USB_CDC_NETWORK_TERMINAL_TYPE = 10
 USB_CDC_OBEX_TYPE = 21
+USB_CDC_PROTO_NONE = 0
+USB_CDC_SUBCLASS_ETHERNET = 6
+USB_CDC_SUBCLASS_NCM = 13
 USB_CDC_UNION_TYPE = 6
-USB_CDC_WHCM_TYPE = 17
+USB_CLASS_COMM = 2
 USB_CLASS_HID = 3
 USB_CLASS_PRINTER = 7
 USB_CONFIG_ATT_BATTERY = 16
@@ -139,6 +149,11 @@
 USB_DT_STRING = 3
 USB_DT_WIRELESS_ENDPOINT_COMP = 17
 USB_DT_WIRE_ADAPTER = 33
+USB_ENDPOINT_CDC_ECM_DATA_ATTRIBUTES = 2
+USB_ENDPOINT_CDC_ECM_IN_ADDRESS = 130
+USB_ENDPOINT_CDC_ECM_NOTIFY_ADDRESS = 129
+USB_ENDPOINT_CDC_ECM_NOTIFY_ATTRIBUTES = 3
+USB_ENDPOINT_CDC_ECM_OUT_ADDRESS = 3
 USB_ENDPOINT_HID_ATTRIBUTES = 3
 USB_ENDPOINT_HID_IN_ADDRESS = 129
 USB_ENDPOINT_HID_OUT_ADDRESS = 2
diff --git a/sys/openbsd/dev_speaker.txt b/sys/openbsd/dev_speaker.txt
new file mode 100644
index 0000000..9da2c22
--- /dev/null
+++ b/sys/openbsd/dev_speaker.txt
@@ -0,0 +1,20 @@
+# Copyright 2019 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+include <sys/param.h>
+include <sys/ioctl.h>
+include <sys/fcntl.h>
+
+include <dev/isa/spkrio.h>
+
+resource fd_speaker[fd]
+
+openat$speaker(fd const[AT_FDCWD], file ptr[in, string["/dev/speaker"]], flags flags[open_flags], mode const[0]) fd_speaker
+
+ioctl$SPKRTONE(fd fd_diskmap, cmd const[SPKRTONE], arg ptr[in, tone])
+ioctl$SPKRTUNE(fd fd_diskmap, cmd const[SPKRTUNE], arg ptr[in, tone])
+
+tone {
+	frequency	int32
+	duration	int32
+}
diff --git a/sys/openbsd/dev_speaker_amd64.const b/sys/openbsd/dev_speaker_amd64.const
new file mode 100644
index 0000000..15aae8d
--- /dev/null
+++ b/sys/openbsd/dev_speaker_amd64.const
@@ -0,0 +1,6 @@
+# AUTOGENERATED FILE
+AT_FDCWD = 18446744073709551516
+SPKRTONE = 2148029185
+SPKRTUNE = 536892162
+SYS_ioctl = 54
+SYS_openat = 321
diff --git a/sys/openbsd/gen/amd64.go b/sys/openbsd/gen/amd64.go
index 3ff9c8d..38b721f 100644
--- a/sys/openbsd/gen/amd64.go
+++ b/sys/openbsd/gen/amd64.go
@@ -19,6 +19,7 @@
 	{Name: "fd_klog", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_klog"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_kqueue", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_kqueue"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_pci", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_pci"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
+	{Name: "fd_speaker", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_speaker"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_tty", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_tty"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_vmm", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_vmm"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
 	{Name: "fd_wsdisplay", Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}}, Kind: []string{"fd", "fd_wsdisplay"}, Values: []uint64{18446744073709551615, 18446744073709551516}},
@@ -471,6 +472,10 @@
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "sec", TypeSize: 8, ArgDir: 2}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "intptr", FldName: "usec", TypeSize: 8, ArgDir: 2}}},
 	}}},
+	{Key: StructKey{Name: "tone"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "tone", TypeSize: 8}, Fields: []Type{
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "frequency", TypeSize: 4}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "duration", TypeSize: 4}}},
+	}}},
 	{Key: StructKey{Name: "tstamps"}, Desc: &StructDesc{TypeCommon: TypeCommon{TypeName: "tstamps", TypeSize: 8}, Fields: []Type{
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "set", TypeSize: 4}}},
 		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "clr", TypeSize: 4}}},
@@ -797,6 +802,9 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peer", TypeSize: 8, IsOptional: true}, Type: &UnionType{Key: StructKey{Name: "sockaddr_un", Dir: 1}}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "peerlen", TypeSize: 8}, Type: &LenType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "len", TypeSize: 4, ArgDir: 2}}, Path: []string{"peer"}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "sock_unix", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{NR: 51, Name: "acct", CallName: "acct", Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "path", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+	}},
 	{NR: 104, Name: "bind", CallName: "bind", Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "sock", FldName: "fd", TypeSize: 4}},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "addr", TypeSize: 8}, Type: &UnionType{Key: StructKey{Name: "sockaddr_storage"}}},
@@ -1292,6 +1300,16 @@
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 3222302723},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "arg", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "pci_io"}}},
 	}},
+	{NR: 54, Name: "ioctl$SPKRTONE", CallName: "ioctl", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_diskmap", FldName: "fd", TypeSize: 4}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 2148029185},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "arg", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "tone"}}},
+	}},
+	{NR: 54, Name: "ioctl$SPKRTUNE", CallName: "ioctl", Args: []Type{
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_diskmap", FldName: "fd", TypeSize: 4}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 536892162},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "arg", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "tone"}}},
+	}},
 	{NR: 54, Name: "ioctl$TIOCCBRK", CallName: "ioctl", MissingArgs: 1, Args: []Type{
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "fd_tty", FldName: "fd", TypeSize: 4}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "cmd", TypeSize: 8}}, Val: 536900730},
@@ -1693,6 +1711,12 @@
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "timeout", TypeSize: 8}, Type: &StructType{Key: StructKey{Name: "timespec"}}},
 	}},
 	{NR: 269, Name: "kqueue", CallName: "kqueue", Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_kqueue", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{NR: 45, Name: "ktrace", CallName: "ktrace", Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "tracefile", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "ktrace_op_flags", FldName: "ops", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 4}, BitMask: true},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "ktrace_trace_flags", FldName: "trpoints", TypeSize: 8}}, Vals: []uint64{2, 4, 8, 16, 32, 256, 512, 1024, 2048, 4096, 1073741824}, BitMask: true},
+		&ResourceType{TypeCommon: TypeCommon{TypeName: "pid", FldName: "pid", TypeSize: 4}},
+	}},
 	{NR: 254, Name: "lchown", CallName: "lchown", Args: []Type{
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
 		&ResourceType{TypeCommon: TypeCommon{TypeName: "uid", FldName: "uid", TypeSize: 4}},
@@ -1873,6 +1897,12 @@
 		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 8, 512, 1024, 2048, 16, 32, 256, 65536, 128, 128, 128, 32768, 131072, 64}},
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "mode", TypeSize: 8}}},
 	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_pci", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
+	{NR: 321, Name: "openat$speaker", CallName: "openat", Args: []Type{
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "fd", TypeSize: 8}}, Val: 18446744073709551516},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 13}, Kind: 2, Values: []string{"/dev/speaker\x00"}}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{0, 1, 2, 8, 512, 1024, 2048, 16, 32, 256, 65536, 128, 128, 128, 32768, 131072, 64}},
+		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "mode", TypeSize: 8}}},
+	}, Ret: &ResourceType{TypeCommon: TypeCommon{TypeName: "fd_speaker", FldName: "ret", TypeSize: 4, ArgDir: 1}}},
 	{NR: 321, Name: "openat$tty", CallName: "openat", Args: []Type{
 		&ConstType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "const", FldName: "fd", TypeSize: 8}}, Val: 18446744073709551516},
 		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "file", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "string", TypeSize: 9}, Kind: 2, Values: []string{"/dev/tty\x00"}}},
@@ -2531,6 +2561,21 @@
 	{Name: "KDSETRAD", Value: 536890179},
 	{Name: "KD_GRAPHICS", Value: 1},
 	{Name: "KD_TEXT"},
+	{Name: "KTRFAC_EXECARGS", Value: 1024},
+	{Name: "KTRFAC_EXECENV", Value: 2048},
+	{Name: "KTRFAC_GENIO", Value: 16},
+	{Name: "KTRFAC_INHERIT", Value: 1073741824},
+	{Name: "KTRFAC_NAMEI", Value: 8},
+	{Name: "KTRFAC_PLEDGE", Value: 4096},
+	{Name: "KTRFAC_PSIG", Value: 32},
+	{Name: "KTRFAC_STRUCT", Value: 256},
+	{Name: "KTRFAC_SYSCALL", Value: 2},
+	{Name: "KTRFAC_SYSRET", Value: 4},
+	{Name: "KTRFAC_USER", Value: 512},
+	{Name: "KTRFLAG_DESCEND", Value: 4},
+	{Name: "KTROP_CLEAR", Value: 1},
+	{Name: "KTROP_CLEARFILE", Value: 2},
+	{Name: "KTROP_SET"},
 	{Name: "K_RAW"},
 	{Name: "K_XLATE", Value: 1},
 	{Name: "LED_CAP", Value: 1},
@@ -2686,7 +2731,10 @@
 	{Name: "SO_SNDTIMEO", Value: 4101},
 	{Name: "SO_TIMESTAMP", Value: 2048},
 	{Name: "SO_TYPE", Value: 4104},
+	{Name: "SPKRTONE", Value: 2148029185},
+	{Name: "SPKRTUNE", Value: 536892162},
 	{Name: "SYS_accept", Value: 30},
+	{Name: "SYS_acct", Value: 51},
 	{Name: "SYS_bind", Value: 104},
 	{Name: "SYS_chdir", Value: 12},
 	{Name: "SYS_chflags", Value: 34},
@@ -2732,6 +2780,7 @@
 	{Name: "SYS_ioctl", Value: 54},
 	{Name: "SYS_kevent", Value: 72},
 	{Name: "SYS_kqueue", Value: 269},
+	{Name: "SYS_ktrace", Value: 45},
 	{Name: "SYS_lchown", Value: 254},
 	{Name: "SYS_link", Value: 9},
 	{Name: "SYS_linkat", Value: 317},
@@ -3001,4 +3050,4 @@
 	{Name: "__MAP_NOREPLACE", Value: 2048},
 }
 
-const revision_amd64 = "33de16487cc0a0d25eaa32ea4166bbbc75d2994e"
+const revision_amd64 = "eee7ba72a578dfec4292538dd7a1fbe4e927d64f"
diff --git a/sys/openbsd/ktrace.txt b/sys/openbsd/ktrace.txt
new file mode 100644
index 0000000..ca89c00
--- /dev/null
+++ b/sys/openbsd/ktrace.txt
@@ -0,0 +1,11 @@
+# Copyright 2019 syzkaller project authors. All rights reserved.
+# Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+include <sys/param.h>
+
+include <sys/ktrace.h>
+
+ktrace(tracefile ptr[in, filename], ops flags[ktrace_op_flags], trpoints flags[ktrace_trace_flags], pid pid)
+
+ktrace_op_flags = KTROP_SET, KTROP_CLEAR, KTROP_CLEARFILE, KTRFLAG_DESCEND
+ktrace_trace_flags = KTRFAC_SYSCALL, KTRFAC_SYSRET, KTRFAC_NAMEI, KTRFAC_GENIO, KTRFAC_PSIG, KTRFAC_STRUCT, KTRFAC_USER, KTRFAC_EXECARGS, KTRFAC_EXECENV, KTRFAC_PLEDGE, KTRFAC_INHERIT
diff --git a/sys/openbsd/ktrace_amd64.const b/sys/openbsd/ktrace_amd64.const
new file mode 100644
index 0000000..a6207c4
--- /dev/null
+++ b/sys/openbsd/ktrace_amd64.const
@@ -0,0 +1,17 @@
+# AUTOGENERATED FILE
+KTRFAC_EXECARGS = 1024
+KTRFAC_EXECENV = 2048
+KTRFAC_GENIO = 16
+KTRFAC_INHERIT = 1073741824
+KTRFAC_NAMEI = 8
+KTRFAC_PLEDGE = 4096
+KTRFAC_PSIG = 32
+KTRFAC_STRUCT = 256
+KTRFAC_SYSCALL = 2
+KTRFAC_SYSRET = 4
+KTRFAC_USER = 512
+KTRFLAG_DESCEND = 4
+KTROP_CLEAR = 1
+KTROP_CLEARFILE = 2
+KTROP_SET = 0
+SYS_ktrace = 45
diff --git a/sys/openbsd/sys.txt b/sys/openbsd/sys.txt
index d951981..79b7a47 100644
--- a/sys/openbsd/sys.txt
+++ b/sys/openbsd/sys.txt
@@ -119,6 +119,8 @@
 pledge(promises ptr[in, string], execpromises ptr[in, string])
 unveil(path ptr[in, filename], permissions ptr[in, string[unveil_permissions]])
 
+acct(path ptr[in, filename])
+
 openat$null(fd const[AT_FDCWD], file ptr[in, string["/dev/null"]], flags flags[open_flags], mode const[0]) fd
 openat$zero(fd const[AT_FDCWD], file ptr[in, string["/dev/zero"]], flags flags[open_flags], mode const[0]) fd
 
diff --git a/sys/openbsd/sys_amd64.const b/sys/openbsd/sys_amd64.const
index c1b7d72..1b49d28 100644
--- a/sys/openbsd/sys_amd64.const
+++ b/sys/openbsd/sys_amd64.const
@@ -64,6 +64,7 @@
 SF_APPEND = 262144
 SF_ARCHIVED = 65536
 SF_IMMUTABLE = 131072
+SYS_acct = 51
 SYS_chdir = 12
 SYS_chflags = 34
 SYS_chflagsat = 107
diff --git a/sys/targets/targets.go b/sys/targets/targets.go
index d5eb388..1d32b7c 100644
--- a/sys/targets/targets.go
+++ b/sys/targets/targets.go
@@ -243,16 +243,20 @@
 			PtrSize:          8,
 			PageSize:         4 << 10,
 			KernelHeaderArch: "x64",
-			CCompiler:        os.ExpandEnv("${SOURCEDIR}/buildtools/linux-x64/clang/bin/clang++"),
+			CCompiler:        os.ExpandEnv("${SOURCEDIR}/prebuilt/third_party/clang/linux-x64/bin/clang++"),
 			CrossCFlags: []string{
 				"-Wno-deprecated",
 				"--target=x86_64-fuchsia",
+				"-ldriver",
 				"-lfdio",
 				"-lzircon",
-				"-ldriver",
 				"--sysroot", os.ExpandEnv("${SOURCEDIR}/out/x64/sdk/exported/zircon_sysroot/arch/x64/sysroot"),
-				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/fdio/include"),
 				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/ddk/include"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/fdio/include"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/fidl/include"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/out/x64/fidling/gen/zircon/public/fidl/fuchsia-device"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/out/x64/fidling/gen/zircon/public/fidl/fuchsia-hardware-nand"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/out/x64/fidling/gen/zircon/public/fidl/fuchsia-hardware-usb-peripheral"),
 				"-L", os.ExpandEnv("${SOURCEDIR}/out/x64/gen/zircon/public/lib/driver"),
 				"-L", os.ExpandEnv("${SOURCEDIR}/out/x64/gen/zircon/public/lib/fdio"),
 			},
@@ -261,16 +265,20 @@
 			PtrSize:          8,
 			PageSize:         4 << 10,
 			KernelHeaderArch: "arm64",
-			CCompiler:        os.ExpandEnv("${SOURCEDIR}/buildtools/linux-x64/clang/bin/clang++"),
+			CCompiler:        os.ExpandEnv("${SOURCEDIR}/prebuilt/third_party/clang/linux-x64/bin/clang++"),
 			CrossCFlags: []string{
 				"-Wno-deprecated",
 				"--target=aarch64-fuchsia",
+				"-ldriver",
 				"-lfdio",
 				"-lzircon",
-				"-ldriver",
 				"--sysroot", os.ExpandEnv("${SOURCEDIR}/out/arm64/sdk/exported/zircon_sysroot/arch/arm64/sysroot"),
-				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/fdio/include"),
 				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/ddk/include"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/fdio/include"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/zircon/system/ulib/fidl/include"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/out/arm64/fidling/gen/zircon/public/fidl/fuchsia-device"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/out/arm64/fidling/gen/zircon/public/fidl/fuchsia-hardware-nand"),
+				"-I", os.ExpandEnv("${SOURCEDIR}/out/arm64/fidling/gen/zircon/public/fidl/fuchsia-hardware-usb-peripheral"),
 				"-L", os.ExpandEnv("${SOURCEDIR}/out/arm64/gen/zircon/public/lib/driver"),
 				"-L", os.ExpandEnv("${SOURCEDIR}/out/arm64/gen/zircon/public/lib/fdio"),
 			},
@@ -311,7 +319,6 @@
 		ExecutorUsesShmem:      true,
 		ExecutorUsesForkServer: true,
 		KernelObject:           "vmlinux",
-		CPP:                    "cpp",
 	},
 	"freebsd": {
 		SyscallNumbers:         true,
@@ -328,7 +335,6 @@
 		ExecutorUsesShmem:      true,
 		ExecutorUsesForkServer: true,
 		KernelObject:           "netbsd.gdb",
-		CPP:                    "cpp",
 	},
 	"openbsd": {
 		SyscallNumbers:         true,
@@ -344,7 +350,6 @@
 		ExecutorUsesShmem:      false,
 		ExecutorUsesForkServer: false,
 		KernelObject:           "zircon.elf",
-		CPP:                    "cpp",
 	},
 	"windows": {
 		SyscallNumbers:         false,
@@ -352,7 +357,6 @@
 		ExecutorUsesForkServer: false,
 		ExeExtension:           ".exe",
 		KernelObject:           "vmlinux",
-		CPP:                    "cpp",
 	},
 	"akaros": {
 		BuildOS:                "linux",
@@ -361,12 +365,10 @@
 		ExecutorUsesShmem:      false,
 		ExecutorUsesForkServer: true,
 		KernelObject:           "akaros-kernel-64b",
-		CPP:                    "cpp",
 	},
 	"trusty": {
 		SyscallNumbers: true,
 		SyscallPrefix:  "__NR_",
-		CPP:            "cpp",
 	},
 }
 
@@ -397,8 +399,12 @@
 		goos = "linux"
 	}
 	for _, target := range List["test"] {
-		target.CCompiler = List[goos][runtime.GOARCH].CCompiler
-		target.CPP = List[goos][runtime.GOARCH].CPP
+		if List[goos] != nil {
+			if host := List[goos][runtime.GOARCH]; host != nil {
+				target.CCompiler = host.CCompiler
+				target.CPP = host.CPP
+			}
+		}
 		target.BuildOS = goos
 		if runtime.GOOS == "freebsd" && runtime.GOARCH == "amd64" && target.PtrSize == 4 {
 			// -m32 alone does not work on freebsd with gcc.
@@ -430,6 +436,9 @@
 	if target.CCompiler == "" {
 		target.CCompiler = target.CCompilerPrefix + "gcc"
 	}
+	if target.CPP == "" {
+		target.CPP = "cpp"
+	}
 	if target.BuildOS == "" {
 		target.BuildOS = OS
 	}
diff --git a/sys/test/gen/64.go b/sys/test/gen/64.go
index b6f1b0b..f0c1afa 100644
--- a/sys/test/gen/64.go
+++ b/sys/test/gen/64.go
@@ -641,6 +641,49 @@
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "a0", TypeSize: 8}}, ValuesStart: 10, ValuesPerProc: 2},
 		&ProcType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "proc", FldName: "a1", TypeSize: 8, IsOptional: true}}, ValuesStart: 10, ValuesPerProc: 2},
 	}},
+	{Name: "mutate$array", CallName: "mutate", MissingArgs: 6, Args: []Type{
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", FldName: "i1", TypeSize: 8}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", FldName: "i2", TypeSize: 8}}, Kind: 2, RangeEnd: 536870911},
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "vec", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", TypeSize: 4}}, Kind: 2, RangeEnd: 1}}},
+	}},
+	{Name: "mutate$array2", CallName: "mutate", MissingArgs: 8, Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "vec", TypeSize: 8}, Type: &ArrayType{TypeCommon: TypeCommon{TypeName: "array", IsVarlen: true}, Type: &StructType{Key: StructKey{Name: "syz_struct1"}}}},
+	}},
+	{Name: "mutate$flags", CallName: "mutate", MissingArgs: 5, Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "filename", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", FldName: "i1", TypeSize: 8}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "b1", TypeSize: 2}}, Kind: 2, RangeEnd: 1},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bitmask_flags", FldName: "flags", TypeSize: 8}}, Vals: []uint64{1, 8, 16}, BitMask: true},
+	}},
+	{Name: "mutate$flags2", CallName: "mutate", MissingArgs: 7, Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "filename", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "bitmask_flags2", FldName: "flags", TypeSize: 8}}, Vals: []uint64{1, 2, 4, 8, 16, 32, 64, 128}, BitMask: true},
+	}},
+	{Name: "mutate$flags3", CallName: "mutate", MissingArgs: 7, Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "filename", TypeSize: 8}, Type: &BufferType{TypeCommon: TypeCommon{TypeName: "filename", IsVarlen: true}, Kind: 3}},
+		&FlagsType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "open_flags2", FldName: "flags", TypeSize: 8}}, Vals: []uint64{12297829382473034410, 12297829382759365563, 13527612320720337851, 13527612321006669004, 14757395258967641292, 14757395259253972445, 15987178197214944733, 15987178197501275886, 17216961135462248174, 17216961135748579327, 18446744073709551615}},
+	}},
+	{Name: "mutate$integer", CallName: "mutate", Args: []Type{
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b1", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b2", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b3", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b4", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b5", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b6", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b7", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "b8", TypeSize: 1}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", FldName: "i9", TypeSize: 8}}},
+	}},
+	{Name: "mutate$integer2", CallName: "mutate", MissingArgs: 4, Args: []Type{
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", FldName: "b1", TypeSize: 8}}, Kind: 2, RangeEnd: 1},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int64", FldName: "i1", TypeSize: 8}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int32", FldName: "i2", TypeSize: 4}}},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int16", FldName: "i3", TypeSize: 2}}, Kind: 2, RangeEnd: 8},
+		&IntType{IntTypeCommon: IntTypeCommon{TypeCommon: TypeCommon{TypeName: "int8", FldName: "i4", TypeSize: 1}}, Kind: 2, RangeEnd: 8},
+	}},
+	{Name: "mutate$union", CallName: "mutate", MissingArgs: 8, Args: []Type{
+		&PtrType{TypeCommon: TypeCommon{TypeName: "ptr", FldName: "p", TypeSize: 8}, Type: &UnionType{Key: StructKey{Name: "syz_union0"}}},
+	}},
 	{Name: "mutate0", CallName: "mutate0"},
 	{Name: "mutate1", CallName: "mutate1"},
 	{Name: "mutate2", CallName: "mutate2"},
@@ -1023,6 +1066,7 @@
 	{Name: "SYS_fallback"},
 	{Name: "SYS_foo"},
 	{Name: "SYS_minimize"},
+	{Name: "SYS_mutate"},
 	{Name: "SYS_mutate0"},
 	{Name: "SYS_mutate1"},
 	{Name: "SYS_mutate2"},
@@ -1039,4 +1083,4 @@
 	{Name: "SYS_unsupported"},
 }
 
-const revision_64 = "8c0a50a6c63e5bd297e9f6421864685e1fd7dc96"
+const revision_64 = "71d8f9a8f2ed06129920bb9f60aef16fb9ca749b"
diff --git a/sys/test/test.txt b/sys/test/test.txt
index 51be5d4..bb2b454 100644
--- a/sys/test/test.txt
+++ b/sys/test/test.txt
@@ -734,7 +734,21 @@
 mutate7(a0 ptr[in, string], a1 len[a0])
 mutate8(a0 proc[100, 4, opt])
 
+# Test for arguments mutation
+mutate$integer(b1 bool8, b2 bool8, b3 bool8, b4 bool8, b5 bool8, b6 bool8, b7 bool8, b8 bool8, i9 int64)
+mutate$integer2(b1 bool64, i1 int64, i2 int32, i3 int16[0x0:0x8], i4 int8[0x0:0x8])
+mutate$flags(filename ptr[in, filename], i1 int64, b1 bool16, flags flags[bitmask_flags])
+mutate$flags2(filename ptr[in, filename], flags flags[bitmask_flags2])
+mutate$flags3(filename ptr[in, filename], flags flags[open_flags2])
+mutate$array(i1 int64, i2 int64[0x0:0x1fffffff], vec ptr[in, array[int32[0:1]]])
+mutate$array2(vec ptr[in, array[syz_struct1]])
+mutate$union(p ptr[in, syz_union0])
+
 open_flags = 0xabababababababab, 0xcdcdcdcdcdcdcdcd
+open_flags2 = 0xaaaaaaaaaaaaaaaa, 0xaaaaaaaabbbbbbbb, 0xbbbbbbbbbbbbbbbb, 0xbbbbbbbbcccccccc, 0xcccccccccccccccc, 0xccccccccdddddddd, 0xdddddddddddddddd, 0xddddddddeeeeeeee, 0xeeeeeeeeeeeeeeee, 0xeeeeeeeeffffffff, 0xffffffffffffffff
+
+bitmask_flags = 0x1, 0x8, 0x10
+bitmask_flags2 = 0x1, 0x2, 0x4, 0x8, 0x10, 0x20, 0x40, 0x80
 
 # Minimization tests.
 
diff --git a/sys/test/test_64.const b/sys/test/test_64.const
index f5ed8a6..f487af8 100644
--- a/sys/test/test_64.const
+++ b/sys/test/test_64.const
@@ -1,4 +1,5 @@
 SYS_foo = 0
+SYS_mutate = 0
 SYS_mutate0 = 0
 SYS_mutate1 = 0
 SYS_mutate2 = 0
diff --git a/tools/create-openbsd-gce-ci.sh b/tools/create-openbsd-gce-ci.sh
index e72de7e..5f1e5d9 100755
--- a/tools/create-openbsd-gce-ci.sh
+++ b/tools/create-openbsd-gce-ci.sh
@@ -11,7 +11,7 @@
 set -eu -o pipefail
 
 readonly MIRROR="${MIRROR:-cdn.openbsd.org}"
-readonly VERSION="${VERSION:-6.5}"
+readonly VERSION="${VERSION:-6.6}"
 readonly DOWNLOAD_VERSION="${DOWNLOAD_VERSION:-snapshots}"
 readonly RELNO="${2:-${VERSION/./}}"
 
diff --git a/tools/create-openbsd-vmm-worker.sh b/tools/create-openbsd-vmm-worker.sh
index 7090d47..d0d01fe 100755
--- a/tools/create-openbsd-vmm-worker.sh
+++ b/tools/create-openbsd-vmm-worker.sh
@@ -11,7 +11,7 @@
 set -eu -o pipefail
 
 readonly MIRROR="${MIRROR:-cdn.openbsd.org}"
-readonly VERSION="${VERSION:-6.5}"
+readonly VERSION="${VERSION:-6.6}"
 readonly DOWNLOAD_VERSION="${DOWNLOAD_VERSION:-snapshots}"
 readonly RELNO="${2:-${VERSION/./}}"
 
diff --git a/tools/syz-mutate/mutate.go b/tools/syz-mutate/mutate.go
index b0361a2..56aab8e 100644
--- a/tools/syz-mutate/mutate.go
+++ b/tools/syz-mutate/mutate.go
@@ -14,6 +14,7 @@
 	"strings"
 	"time"
 
+	"github.com/google/syzkaller/pkg/db"
 	"github.com/google/syzkaller/pkg/mgrconfig"
 	"github.com/google/syzkaller/prog"
 	_ "github.com/google/syzkaller/sys"
@@ -25,6 +26,7 @@
 	flagSeed   = flag.Int("seed", -1, "prng seed")
 	flagLen    = flag.Int("len", 30, "number of calls in programs")
 	flagEnable = flag.String("enable", "", "comma-separated list of enabled syscalls")
+	flagCorpus = flag.String("corpus", "", "name of the corpus file")
 )
 
 func main() {
@@ -56,8 +58,12 @@
 	if *flagSeed != -1 {
 		seed = int64(*flagSeed)
 	}
+	var corpus []*prog.Prog
+	if *flagCorpus != "" {
+		corpus = readCorpus(*flagCorpus, target)
+	}
 	rs := rand.NewSource(seed)
-	prios := target.CalculatePriorities(nil)
+	prios := target.CalculatePriorities(corpus)
 	ct := target.BuildChoiceTable(prios, syscalls)
 	var p *prog.Prog
 	if flag.NArg() == 0 {
@@ -73,7 +79,24 @@
 			fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err)
 			os.Exit(1)
 		}
-		p.Mutate(rs, *flagLen, ct, nil)
+		p.Mutate(rs, *flagLen, ct, corpus)
 	}
 	fmt.Printf("%s\n", p.Serialize())
 }
+
+func readCorpus(filename string, target *prog.Target) (corpus []*prog.Prog) {
+	dbObj, err := db.Open(filename)
+	if err != nil {
+		fmt.Fprintf(os.Stderr, "failed to open the corpus file: %v\n", err)
+		os.Exit(1)
+	}
+	for _, v := range dbObj.Records {
+		p, err := target.Deserialize(v.Val, prog.NonStrict)
+		if err != nil {
+			fmt.Fprintf(os.Stderr, "failed to deserialize the program: %v\n", err)
+			os.Exit(1)
+		}
+		corpus = append(corpus, p)
+	}
+	return corpus
+}
diff --git a/tools/syz-symbolize/symbolize.go b/tools/syz-symbolize/symbolize.go
index 2dc8145..5f88e68 100644
--- a/tools/syz-symbolize/symbolize.go
+++ b/tools/syz-symbolize/symbolize.go
@@ -17,8 +17,8 @@
 var (
 	flagOS        = flag.String("os", runtime.GOOS, "target os")
 	flagArch      = flag.String("arch", runtime.GOARCH, "target arch")
-	flagKernelSrc = flag.String("kernel_src", ".", "path to kernel sources")
 	flagKernelObj = flag.String("kernel_obj", ".", "path to kernel build/obj dir")
+	flagKernelSrc = flag.String("kernel_src", "", "path to kernel sources (defaults to kernel_obj)")
 )
 
 func main() {
@@ -29,11 +29,13 @@
 		os.Exit(1)
 	}
 	cfg := &mgrconfig.Config{
-		TargetOS:   *flagOS,
-		TargetArch: *flagArch,
-		KernelObj:  *flagKernelObj,
-		KernelSrc:  *flagKernelSrc,
+		TargetOS:     *flagOS,
+		TargetArch:   *flagArch,
+		TargetVMArch: *flagArch,
+		KernelObj:    *flagKernelObj,
+		KernelSrc:    *flagKernelSrc,
 	}
+	cfg.CompleteKernelDirs()
 	reporter, err := report.NewReporter(cfg)
 	if err != nil {
 		fmt.Fprintf(os.Stderr, "failed to create reporter: %v\n", err)
diff --git a/tools/syz-trace2syz/proggen/call_selector.go b/tools/syz-trace2syz/proggen/call_selector.go
index 989cbe6..5ace0fd 100644
--- a/tools/syz-trace2syz/proggen/call_selector.go
+++ b/tools/syz-trace2syz/proggen/call_selector.go
@@ -137,8 +137,11 @@
 
 func (cs *openCallSelector) matchOpen(meta *prog.Syscall, call *parser.Syscall) (bool, int) {
 	straceFileArg := call.Args[openDiscriminatorArgs[call.CallName]]
-	syzFileArg := meta.Args[openDiscriminatorArgs[meta.CallName]]
 	straceBuf := straceFileArg.(*parser.BufferType).Val
+	syzFileArg := meta.Args[openDiscriminatorArgs[meta.CallName]]
+	if _, ok := syzFileArg.(*prog.PtrType); !ok {
+		return false, -1
+	}
 	syzBuf := syzFileArg.(*prog.PtrType).Type.(*prog.BufferType)
 	if syzBuf.Kind != prog.BufferString {
 		return false, -1
diff --git a/tools/syz-usbgen/keyboard.c b/tools/syz-usbgen/keyboard.c
new file mode 100644
index 0000000..2a6015d
--- /dev/null
+++ b/tools/syz-usbgen/keyboard.c
@@ -0,0 +1,650 @@
+// +build
+
+// Copyright 2019 syzkaller project authors. All rights reserved.
+// Use of this source code is governed by Apache 2 LICENSE that can be found in the LICENSE file.
+
+#include <assert.h>
+#include <fcntl.h>
+#include <stdbool.h>
+#include <stddef.h>
+#include <stdint.h>
+#include <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <unistd.h>
+
+#include <linux/types.h>
+
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <sys/ioctl.h>
+#include <sys/mman.h>
+
+#include <linux/hid.h>
+#include <linux/usb/ch9.h>
+
+/*----------------------------------------------------------------------*/
+
+struct hid_class_descriptor {
+	__u8  bDescriptorType;
+	__le16 wDescriptorLength;
+} __attribute__ ((packed));
+
+struct hid_descriptor {
+	__u8  bLength;
+	__u8  bDescriptorType;
+	__le16 bcdHID;
+	__u8  bCountryCode;
+	__u8  bNumDescriptors;
+
+	struct hid_class_descriptor desc[1];
+} __attribute__ ((packed));
+
+/*----------------------------------------------------------------------*/
+
+enum usb_fuzzer_event_type {
+	USB_FUZZER_EVENT_INVALID,
+	USB_FUZZER_EVENT_CONNECT,
+	USB_FUZZER_EVENT_DISCONNECT,
+	USB_FUZZER_EVENT_SUSPEND,
+	USB_FUZZER_EVENT_RESUME,
+	USB_FUZZER_EVENT_CONTROL,
+};
+
+struct usb_fuzzer_event {
+	uint32_t	type;
+	uint32_t	length;
+	char		data[0];
+};
+
+struct usb_fuzzer_init {
+	uint64_t	speed;
+	const char	*driver_name;
+	const char	*device_name;
+};
+
+struct usb_fuzzer_ep_io {
+	uint16_t	ep;
+	uint16_t	flags;
+	uint32_t	length;
+	char		data[0];
+};
+
+#define USB_FUZZER_IOCTL_INIT		_IOW('U', 0, struct usb_fuzzer_init)
+#define USB_FUZZER_IOCTL_RUN		_IO('U', 1)
+#define USB_FUZZER_IOCTL_EVENT_FETCH	_IOR('U', 2, struct usb_fuzzer_event)
+#define USB_FUZZER_IOCTL_EP0_WRITE	_IOW('U', 3, struct usb_fuzzer_ep_io)
+#define USB_FUZZER_IOCTL_EP0_READ	_IOWR('U', 4, struct usb_fuzzer_ep_io)
+#define USB_FUZZER_IOCTL_EP_ENABLE	_IOW('U', 5, struct usb_endpoint_descriptor)
+#define USB_FUZZER_IOCTL_EP_WRITE	_IOW('U', 7, struct usb_fuzzer_ep_io)
+#define USB_FUZZER_IOCTL_EP_READ	_IOWR('U', 8, struct usb_fuzzer_ep_io)
+#define USB_FUZZER_IOCTL_CONFIGURE	_IO('U', 9)
+#define USB_FUZZER_IOCTL_VBUS_DRAW	_IOW('U', 10, uint32_t)
+
+/*----------------------------------------------------------------------*/
+
+int usb_fuzzer_open() {
+	int fd = open("/sys/kernel/debug/usb-fuzzer", O_RDWR);
+	if (fd < 0) {
+		perror("open()");
+		exit(EXIT_FAILURE);
+	}
+	return fd;
+}
+
+void usb_fuzzer_init(int fd, enum usb_device_speed speed) {
+	struct usb_fuzzer_init arg;
+	arg.speed = speed;
+	arg.driver_name = "dummy_udc";
+	arg.device_name = "dummy_udc.0";
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_INIT, &arg);
+	if (rv != 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_INIT)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+void usb_fuzzer_run(int fd) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_RUN, 0);
+	if (rv != 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_RUN)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+void usb_fuzzer_event_fetch(int fd, struct usb_fuzzer_event *event) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_EVENT_FETCH, event);
+	if (rv != 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_EVENT_FETCH)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+void usb_fuzzer_ep0_read(int fd, struct usb_fuzzer_ep_io *io) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_EP0_READ, io);
+	if (rv != 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_EP0_READ)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+void usb_fuzzer_ep0_write(int fd, struct usb_fuzzer_ep_io *io) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_EP0_WRITE, io);
+	if (rv != 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_EP0_WRITE)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+int usb_fuzzer_ep_enable(int fd, struct usb_endpoint_descriptor *desc) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_EP_ENABLE, desc);
+	if (rv < 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_EP_ENABLE)");
+		exit(EXIT_FAILURE);
+	}
+	return rv;
+}
+
+int usb_fuzzer_ep_write(int fd, struct usb_fuzzer_ep_io *io) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_EP_WRITE, io);
+	if (rv < 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_EP_WRITE)");
+		exit(EXIT_FAILURE);
+	}
+	return rv;
+}
+
+void usb_fuzzer_configure(int fd) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_CONFIGURE, 0);
+	if (rv < 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_CONFIGURED)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+void usb_fuzzer_vbus_draw(int fd, uint32_t power) {
+	int rv = ioctl(fd, USB_FUZZER_IOCTL_VBUS_DRAW, power);
+	if (rv < 0) {
+		perror("ioctl(USB_FUZZER_IOCTL_VBUS_DRAW)");
+		exit(EXIT_FAILURE);
+	}
+}
+
+/*----------------------------------------------------------------------*/
+
+#define MAX_PACKET_SIZE	64
+
+#define USB_VENDOR	0x046d
+#define USB_PRODUCT	0xc312 
+
+#define STRING_ID_MANUFACTURER	0
+#define STRING_ID_PRODUCT	1
+#define STRING_ID_SERIAL	2
+#define STRING_ID_CONFIG	3
+#define STRING_ID_INTERFACE	4
+
+struct usb_device_descriptor usb_device = {
+	.bLength =		USB_DT_DEVICE_SIZE,
+	.bDescriptorType =	USB_DT_DEVICE,
+	.bcdUSB =		__constant_cpu_to_le16(0x0200),
+	.bDeviceClass =		0,
+	.bDeviceSubClass =	0,
+	.bDeviceProtocol =	0,
+	.bMaxPacketSize0 =	MAX_PACKET_SIZE,
+	.idVendor =		__constant_cpu_to_le16(USB_VENDOR),
+	.idProduct =		__constant_cpu_to_le16(USB_PRODUCT),
+	.bcdDevice =		0,
+	.iManufacturer =	STRING_ID_MANUFACTURER,
+	.iProduct =		STRING_ID_PRODUCT,
+	.iSerialNumber =	STRING_ID_SERIAL,
+	.bNumConfigurations =	1,
+};
+
+struct usb_config_descriptor usb_config = {
+	.bLength =		USB_DT_CONFIG_SIZE,
+	.bDescriptorType =	USB_DT_CONFIG,
+	.wTotalLength =		0,  // computed later
+	.bNumInterfaces =	1,
+	.bConfigurationValue =	1,
+	.iConfiguration = 	STRING_ID_CONFIG,
+	.bmAttributes =		USB_CONFIG_ATT_ONE | USB_CONFIG_ATT_SELFPOWER,
+	.bMaxPower =		0x32,
+};
+
+struct usb_interface_descriptor usb_interface = {
+	.bLength =		USB_DT_INTERFACE_SIZE,
+	.bDescriptorType =	USB_DT_INTERFACE,
+	.bInterfaceNumber =	0,
+	.bAlternateSetting =	0,
+	.bNumEndpoints =	1,
+	.bInterfaceClass =	USB_CLASS_HID,
+	.bInterfaceSubClass =	1,
+	.bInterfaceProtocol =	1,
+	.iInterface =		STRING_ID_INTERFACE,
+};
+
+struct usb_endpoint_descriptor usb_endpoint = {
+	.bLength =		USB_DT_ENDPOINT_SIZE,
+	.bDescriptorType =	USB_DT_ENDPOINT,
+	.bEndpointAddress =	USB_DIR_IN | 1,
+	.bmAttributes =		USB_ENDPOINT_XFER_INT,
+	.wMaxPacketSize =	8,
+	.bInterval =		5,
+};
+
+char usb_hid_report[] = {
+	0x05, 0x01,                    // Usage Page (Generic Desktop)        0
+	0x09, 0x06,                    // Usage (Keyboard)                    2
+	0xa1, 0x01,                    // Collection (Application)            4
+	0x05, 0x07,                    //  Usage Page (Keyboard)              6
+	0x19, 0xe0,                    //  Usage Minimum (224)                8
+	0x29, 0xe7,                    //  Usage Maximum (231)                10
+	0x15, 0x00,                    //  Logical Minimum (0)                12
+	0x25, 0x01,                    //  Logical Maximum (1)                14
+	0x75, 0x01,                    //  Report Size (1)                    16
+	0x95, 0x08,                    //  Report Count (8)                   18
+	0x81, 0x02,                    //  Input (Data,Var,Abs)               20
+	0x95, 0x01,                    //  Report Count (1)                   22
+	0x75, 0x08,                    //  Report Size (8)                    24
+	0x81, 0x01,                    //  Input (Cnst,Arr,Abs)               26
+	0x95, 0x03,                    //  Report Count (3)                   28
+	0x75, 0x01,                    //  Report Size (1)                    30
+	0x05, 0x08,                    //  Usage Page (LEDs)                  32
+	0x19, 0x01,                    //  Usage Minimum (1)                  34
+	0x29, 0x03,                    //  Usage Maximum (3)                  36
+	0x91, 0x02,                    //  Output (Data,Var,Abs)              38
+	0x95, 0x05,                    //  Report Count (5)                   40
+	0x75, 0x01,                    //  Report Size (1)                    42
+	0x91, 0x01,                    //  Output (Cnst,Arr,Abs)              44
+	0x95, 0x06,                    //  Report Count (6)                   46
+	0x75, 0x08,                    //  Report Size (8)                    48
+	0x15, 0x00,                    //  Logical Minimum (0)                50
+	0x26, 0xff, 0x00,              //  Logical Maximum (255)              52
+	0x05, 0x07,                    //  Usage Page (Keyboard)              55
+	0x19, 0x00,                    //  Usage Minimum (0)                  57
+	0x2a, 0xff, 0x00,              //  Usage Maximum (255)                59
+	0x81, 0x00,                    //  Input (Data,Arr,Abs)               62
+	0xc0,                          // End Collection                      64
+};
+
+struct hid_descriptor usb_hid = {
+	.bLength =		9,
+	.bDescriptorType =	HID_DT_HID,
+	.bcdHID =		__constant_cpu_to_le16(0x0110),
+	.bCountryCode =		0,
+	.bNumDescriptors =	1,
+	.desc =			{
+		{
+			.bDescriptorType =	HID_DT_REPORT,
+			.wDescriptorLength =	sizeof(usb_hid_report),
+		}
+	},
+};
+
+int build_config(char *data, int length) {
+	struct usb_config_descriptor *config = (struct usb_config_descriptor *)data;
+	int total_length = 0;
+
+	assert(length >= sizeof(usb_config));
+	memcpy(data, &usb_config, sizeof(usb_config));
+	data += sizeof(usb_config);
+	length -= sizeof(usb_config);
+	total_length += sizeof(usb_config);
+
+	assert(length >= sizeof(usb_interface));
+	memcpy(data, &usb_interface, sizeof(usb_interface));
+	data += sizeof(usb_interface);
+	length -= sizeof(usb_interface);
+	total_length += sizeof(usb_interface);
+
+	assert(length >= sizeof(usb_hid));
+	memcpy(data, &usb_hid, sizeof(usb_hid));
+	data += sizeof(usb_hid);
+	length -= sizeof(usb_hid);
+	total_length += sizeof(usb_hid);
+
+	assert(length >= USB_DT_ENDPOINT_SIZE);
+	memcpy(data, &usb_endpoint, USB_DT_ENDPOINT_SIZE);
+	data += USB_DT_ENDPOINT_SIZE;
+	length -= USB_DT_ENDPOINT_SIZE;
+	total_length += USB_DT_ENDPOINT_SIZE;
+
+	config->wTotalLength = __cpu_to_le16(total_length);
+	printf("config->wTotalLength: %d\n", total_length);
+
+	return total_length;
+}
+
+/*----------------------------------------------------------------------*/
+
+void log_control_request(struct usb_ctrlrequest *ctrl) {
+	printf("  bRequestType: 0x%x (%s), bRequest: 0x%x, wValue: 0x%x, wIndex: 0x%x, wLength: %d\n",
+		ctrl->bRequestType, (ctrl->bRequestType & USB_DIR_IN) ? "IN" : "OUT",
+		ctrl->bRequest, ctrl->wValue, ctrl->wIndex, ctrl->wLength);
+
+	switch (ctrl->bRequestType & USB_TYPE_MASK) {
+	case USB_TYPE_STANDARD:
+		printf("  type = USB_TYPE_STANDARD\n");
+		break;
+	case USB_TYPE_CLASS:
+		printf("  type = USB_TYPE_CLASS\n");
+		break;
+	case USB_TYPE_VENDOR:
+		printf("  type = USB_TYPE_VENDOR\n");
+		break;
+	default:
+		printf("  type = unknown = %d\n", (int)ctrl->bRequestType);
+		break;
+	}
+
+	switch (ctrl->bRequestType & USB_TYPE_MASK) {
+	case USB_TYPE_STANDARD:
+		switch (ctrl->bRequest) {
+		case USB_REQ_GET_DESCRIPTOR:
+			printf("  req = USB_REQ_GET_DESCRIPTOR\n");
+			switch (ctrl->wValue >> 8) {
+			case USB_DT_DEVICE:
+				printf("  descriptor = USB_DT_DEVICE\n");
+				break;
+			case USB_DT_CONFIG:
+				printf("  descriptor = USB_DT_CONFIG, index = %d\n", (int)(ctrl->wValue & 0xff));
+				break;
+			case USB_DT_STRING:
+				printf("  descriptor = USB_DT_STRING\n");
+				break;
+			case USB_DT_INTERFACE:
+				printf("  descriptor = USB_DT_INTERFACE\n");
+				break;
+			case USB_DT_ENDPOINT:
+				printf("  descriptor = USB_DT_ENDPOINT\n");
+				break;
+			case USB_DT_DEVICE_QUALIFIER:
+				printf("  descriptor = USB_DT_DEVICE_QUALIFIER\n");
+				break;
+			case USB_DT_OTHER_SPEED_CONFIG:
+				printf("  descriptor = USB_DT_OTHER_SPEED_CONFIG\n");
+				break;
+			case USB_DT_INTERFACE_POWER:
+				printf("  descriptor = USB_DT_INTERFACE_POWER\n");
+				break;
+			case USB_DT_OTG:
+				printf("  descriptor = USB_DT_OTG\n");
+				break;
+			case USB_DT_DEBUG:
+				printf("  descriptor = USB_DT_DEBUG\n");
+				break;
+			case USB_DT_INTERFACE_ASSOCIATION:
+				printf("  descriptor = USB_DT_INTERFACE_ASSOCIATION\n");
+				break;
+			case USB_DT_SECURITY:
+				printf("  descriptor = USB_DT_SECURITY\n");
+				break;
+			case USB_DT_KEY:
+				printf("  descriptor = USB_DT_KEY\n");
+				break;
+			case USB_DT_ENCRYPTION_TYPE:
+				printf("  descriptor = USB_DT_ENCRYPTION_TYPE\n");
+				break;
+			case USB_DT_BOS:
+				printf("  descriptor = USB_DT_BOS\n");
+				break;
+			case USB_DT_DEVICE_CAPABILITY:
+				printf("  descriptor = USB_DT_DEVICE_CAPABILITY\n");
+				break;
+			case USB_DT_WIRELESS_ENDPOINT_COMP:
+				printf("  descriptor = USB_DT_WIRELESS_ENDPOINT_COMP\n");
+				break;
+			case USB_DT_PIPE_USAGE:
+				printf("  descriptor = USB_DT_PIPE_USAGE\n");
+				break;
+			case USB_DT_SS_ENDPOINT_COMP:
+				printf("  descriptor = USB_DT_SS_ENDPOINT_COMP\n");
+				break;
+			case HID_DT_HID:
+				printf("  descriptor = HID_DT_HID\n");
+				return;
+			case HID_DT_REPORT:
+				printf("  descriptor = HID_DT_REPORT\n");
+				return;
+			case HID_DT_PHYSICAL:
+				printf("  descriptor = HID_DT_PHYSICAL\n");
+				return;
+			default:
+				printf("  descriptor = unknown = 0x%x\n", (int)(ctrl->wValue >> 8));
+				break;
+			}
+			break;
+		case USB_REQ_SET_CONFIGURATION:
+			printf("  req = USB_REQ_SET_CONFIGURATION, value = %d\n", (int)ctrl->wValue);
+			break;
+		case USB_REQ_GET_CONFIGURATION:
+			printf("  req = USB_REQ_GET_CONFIGURATION\n");
+			break;
+		case USB_REQ_SET_INTERFACE:
+			printf("  req = USB_REQ_SET_INTERFACE\n");
+			break;
+		case USB_REQ_GET_INTERFACE:
+			printf("  req = USB_REQ_GET_INTERFACE\n");
+			break;
+		case USB_REQ_GET_STATUS:
+			printf("  req = USB_REQ_GET_STATUS\n");
+			break;
+		case USB_REQ_CLEAR_FEATURE:
+			printf("  req = USB_REQ_CLEAR_FEATURE\n");
+			break;
+		case USB_REQ_SET_FEATURE:
+			printf("  req = USB_REQ_SET_FEATURE\n");
+			break;
+		default:
+			printf("  req = unknown = 0x%x\n", (int)ctrl->bRequest);
+			break;
+		}
+		break;
+	case USB_TYPE_CLASS:
+		switch (ctrl->bRequest) {
+		case HID_REQ_GET_REPORT:
+			printf("  req = HID_REQ_GET_REPORT\n");
+			break;
+		case HID_REQ_GET_IDLE:
+			printf("  req = HID_REQ_GET_IDLE\n");
+			break;
+		case HID_REQ_GET_PROTOCOL:
+			printf("  req = HID_REQ_GET_PROTOCOL\n");
+			break;
+		case HID_REQ_SET_REPORT:
+			printf("  req = HID_REQ_SET_REPORT\n");
+			break;
+		case HID_REQ_SET_IDLE:
+			printf("  req = HID_REQ_SET_IDLE\n");
+			break;
+		case HID_REQ_SET_PROTOCOL:
+			printf("  req = HID_REQ_SET_PROTOCOL\n");
+			break;
+		default:
+			printf("  req = unknown = 0x%x\n", (int)ctrl->bRequest);
+			break;
+		}
+		break;
+	default:
+		printf("  req = unknown = 0x%x\n", (int)ctrl->bRequest);
+		break;
+	}
+}
+
+void log_event(struct usb_fuzzer_event *event) {
+	switch (event->type) {
+	case USB_FUZZER_EVENT_CONNECT:
+		printf("event: connect, length: %u\n", event->length);
+		break;
+	case USB_FUZZER_EVENT_DISCONNECT:
+		printf("event: disconnect, length: %u\n", event->length);
+		break;
+	case USB_FUZZER_EVENT_SUSPEND:
+		printf("event: suspend, length: %u\n", event->length);
+		break;
+	case USB_FUZZER_EVENT_RESUME:
+		printf("event: resume, length: %u\n", event->length);
+		break;
+	case USB_FUZZER_EVENT_CONTROL:
+		printf("event: control, length: %u\n", event->length);
+		log_control_request((struct usb_ctrlrequest *)&event->data[0]);
+		break;
+	default:
+		printf("event: unknown, length: %u\n", event->length);
+	}
+}
+
+/*----------------------------------------------------------------------*/
+
+struct usb_fuzzer_control_event {
+	struct usb_fuzzer_event		inner;
+	struct usb_ctrlrequest		ctrl;
+};
+
+struct usb_fuzzer_control_io {
+	struct usb_fuzzer_ep_io		inner;
+	char				data[MAX_PACKET_SIZE];
+};
+
+struct usb_fuzzer_keyboard_io {
+	struct usb_fuzzer_ep_io		inner;
+	char				data[8];
+};
+
+int keyboard_connect(int fd) {
+	int config_length;
+	int ep = -1;
+
+	bool done = false;
+	while (!done) {
+		struct usb_fuzzer_control_event event;
+		event.inner.type = 0;
+		event.inner.length = sizeof(event.ctrl);
+
+		struct usb_fuzzer_control_io response;
+		response.inner.ep = 0;
+		response.inner.flags = 0;
+		response.inner.length = 0;
+
+		usb_fuzzer_event_fetch(fd, (struct usb_fuzzer_event *)&event);
+		log_event((struct usb_fuzzer_event *)&event);
+		if (event.inner.type != USB_FUZZER_EVENT_CONTROL)
+			continue;
+
+		switch (event.ctrl.bRequestType & USB_TYPE_MASK) {
+		case USB_TYPE_STANDARD:
+			switch (event.ctrl.bRequest) {
+			case USB_REQ_GET_DESCRIPTOR:
+				switch (event.ctrl.wValue >> 8) {
+				case USB_DT_DEVICE:
+					memcpy(&response.data[0], &usb_device, sizeof(usb_device));
+					response.inner.length = sizeof(usb_device);
+					goto reply;
+				case USB_DT_CONFIG:
+					config_length = build_config(&response.data[0], sizeof(response.data));
+					response.inner.length = config_length;
+					goto reply;
+				case USB_DT_STRING:
+					response.data[0] = 4;
+					response.data[1] = USB_DT_STRING;
+					if ((event.ctrl.wValue & 0xff) == 0) {
+						response.data[2] = 0x09;
+						response.data[3] = 0x04;
+					} else {
+						response.data[2] = 'x';
+						response.data[3] = 0x00;
+					}
+					response.inner.length = 4;
+					goto reply;
+				case HID_DT_REPORT:
+					memcpy(&response.data[0], &usb_hid_report[0], sizeof(usb_hid_report));
+					response.inner.length = sizeof(usb_hid_report);
+					goto reply;
+				default:
+					printf("fail: no response\n");
+					exit(EXIT_FAILURE);
+				}
+				break;
+			case USB_REQ_SET_CONFIGURATION:
+				ep = usb_fuzzer_ep_enable(fd, &usb_endpoint);
+				usb_fuzzer_vbus_draw(fd, usb_config.bMaxPower);
+				usb_fuzzer_configure(fd);
+				response.inner.length = 0;
+				goto reply;
+			case USB_REQ_GET_INTERFACE:
+				response.data[0] = usb_interface.bInterfaceNumber;
+				response.inner.length = 1;
+				goto reply;
+			default:
+				printf("fail: no response\n");
+				exit(EXIT_FAILURE);
+			}
+			break;
+		case USB_TYPE_CLASS:
+			switch (event.ctrl.bRequest) {
+			case HID_REQ_SET_REPORT:
+				response.inner.length = 1;
+				done = true;
+				goto reply;
+			case HID_REQ_SET_IDLE:
+				response.inner.length = 0;
+				goto reply;
+			case HID_REQ_SET_PROTOCOL:
+				response.inner.length = 0;
+				done = true;
+				goto reply;
+			default:
+				printf("fail: no response\n");
+				exit(EXIT_FAILURE);
+			}
+			break;
+		default:
+			printf("fail: no response\n");
+			exit(EXIT_FAILURE);
+		}
+
+reply:
+		if (event.ctrl.wLength < response.inner.length)
+			response.inner.length = event.ctrl.wLength;
+		if (event.ctrl.bRequestType & USB_DIR_IN)
+			usb_fuzzer_ep0_write(fd, (struct usb_fuzzer_ep_io *)&response);
+		else
+			usb_fuzzer_ep0_read(fd, (struct usb_fuzzer_ep_io *)&response);
+	}
+
+	printf("endpoint: #%d\n", ep);
+	return ep;
+}
+
+void keyboard_loop(int fd, int ep) {
+	struct usb_fuzzer_keyboard_io io;
+	io.inner.ep = ep;
+	io.inner.flags = 0;
+	io.inner.length = 8;
+
+	while (true) {
+		memcpy(&io.inner.data[0], "\x00\x00\x1b\x00\x00\x00\x00\x00", 8);
+		int rv = usb_fuzzer_ep_write(fd, (struct usb_fuzzer_ep_io *)&io);
+		printf("key down: %d\n", rv);
+
+		memcpy(&io.inner.data[0], "\x00\x00\x00\x00\x00\x00\x00\x00", 8);
+		rv = usb_fuzzer_ep_write(fd, (struct usb_fuzzer_ep_io *)&io);
+		printf("key up: %d\n", rv);
+
+		sleep(1);
+	}
+}
+
+int main(int argc, char **argv) {
+	int fd = usb_fuzzer_open();
+	usb_fuzzer_init(fd, USB_SPEED_HIGH);
+	usb_fuzzer_run(fd);
+
+	int ep = keyboard_connect(fd);
+
+	keyboard_loop(fd, ep);
+
+	close(fd);
+
+	return 0;
+}
diff --git a/vm/qemu/qemu.go b/vm/qemu/qemu.go
index 80a2b82..babf48f 100644
--- a/vm/qemu/qemu.go
+++ b/vm/qemu/qemu.go
@@ -164,6 +164,7 @@
 			"kernel.serial=legacy",
 			"kernel.halt-on-panic=true",
 		},
+		HostFuzzer: true,
 	},
 	"akaros/amd64": {
 		Qemu:       "qemu-system-x86_64",