§H.12 step 20: CH-REQUEST initiator-only gate (MY-CH-ID)

Added VARIABLE MY-CH-ID to messaging.4th (fail-closed -1 default) and
set it per-VM in hermes/init.4th and artemis/init.4th. CH-REQUEST now
refuses if the caller-supplied 'from' doesn't match the calling VM's
own id, closing a real spoofing gap found while implementing this.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01QgooKd5hJNtTYqB6CyK5f9
This commit is contained in:
Robert Allan James
2026-09-03 12:09:29 -04:00
co-authored by Claude Sonnet 5
parent 7d53344875
commit cb6e079a73
12 changed files with 27708 additions and 95 deletions
+92 -92
View File
@@ -1,5 +1,5 @@
# Capsule Block Manifest — Auto-generated
<!-- Generated by mkcapsule --manifest 2026-09-03T15:36:04Z -->
<!-- Generated by mkcapsule --manifest 2026-09-03T15:52:36Z -->
<!-- DO NOT EDIT — re-run mkcapsule --manifest to refresh. -->
<!-- Hand-written justifications and immutability notes live -->
<!-- in MANIFEST.md alongside this auto-generated index. -->
@@ -9,15 +9,15 @@
| Capsule | Blocks claimed | xxHash64 | Signed |
|---------|----------------|----------|--------|
| `ACL.4th` | 4000, 4001, 4002, 4003, 4004, 4005, 4006, 4007, 4015 | `0xd781d22148ff171d` | yes |
| `artemis:init.4th` | 4110, 4111, 4112, 4113, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4851, 4852, 4853, 4854 | `0xfe6e570467368153` | yes |
| `artemis:init.4th` | 4110, 4111, 4112, 4113, 4122, 4123, 4124, 4125, 4126, 4127, 4128, 4129, 4130, 4131, 4132, 4133, 4134, 4135, 4136, 4137, 4138, 4139, 4140, 4141, 4160, 4161, 4162, 4163, 4164, 4165, 4166, 4167, 4168, 4169, 4170, 4171, 4172, 4173, 4174, 4177, 4178, 4179, 4180, 4181, 4182, 4851, 4852, 4853, 4854 | `0x90208e9ab5ae0070` | yes |
| `block-acl.4th` | 4019, 4020 | `0xf5eab0544b962dfa` | yes |
| `common:messaging.4th` | 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038 | `0x892fd1c86d8c175e` | yes |
| `common:messaging.4th` | 5003, 5004, 5005, 5006, 5007, 5008, 5009, 5010, 5011, 5012, 5013, 5014, 5015, 5016, 5017, 5018, 5019, 5020, 5021, 5022, 5023, 5024, 5025, 5026, 5027, 5028, 5029, 5030, 5031, 5032, 5033, 5034, 5035, 5036, 5037, 5038 | `0x000bef369e84a1aa` | yes |
| `common:msg.4th` | 4055 | `0x850a0382344ea6c4` | yes |
| `doe-campaign.4th` | 4060, 4061, 4062, 4063, 4064, 4065 | `0x3d4549142d91ec20` | yes |
| `doe.4th` | 2100, 2101, 2102, 2103, 2104, 2105, 2106, 2107 | `0xf154616d248e861f` | yes |
| `fabric.4th` | 4900, 4901, 4902, 4903, 4904, 4905, 4906, 4907, 4908, 4909, 4910, 4911, 4912, 4913, 4914, 4915, 4916, 4917, 4918, 4919, 4920, 4921, 4922, 4923, 4924, 5000, 5001, 5002 | `0x9b1d061339cea98d` | yes |
| `font.4th` | 4925, 4926, 4927, 4928, 4929, 4930, 4931, 4932, 4933, 4934, 4935, 4936, 4937, 4938, 4939, 4940, 4941, 4942, 4943, 4944, 4945, 4946, 4947, 4948, 4949, 4950, 4951, 4952, 4953, 4954, 4955, 4956, 4957, 4958, 4959, 4960, 4961, 4962, 4963, 4964, 4965, 4966, 4967, 4968, 4969, 4970, 4971, 4972, 4973, 4974, 4975, 4976, 4977, 4978, 4979, 4980, 4981, 4982, 4983, 4984, 4985 | `0x720792b4fc758156` | yes |
| `hermes:init.4th` | 4153, 4855, 5116 | `0x9d6119b69d4113af` | yes |
| `hermes:init.4th` | 4153, 4855, 5116 | `0x7d4ab35a4d3ffc0c` | yes |
| `init-0.4th` | 2200, 2201 | `0xd0a9550baf786bb3` | yes |
| `init-1.4th` | 4406, 4415, 4425, 4435 | `0x63e251adb0a03613` | yes |
| `init-2.4th` | 4506, 4515, 4525, 4535, 4545 | `0xf113b3d0bcccae47` | yes |
@@ -118,52 +118,52 @@
| 4063 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4064 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4065 | `doe-campaign.4th` | `0x3d4549142d91ec20` | ok |
| 4110 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4111 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4112 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4113 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4122 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4123 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4124 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4125 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4126 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4127 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4128 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4129 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4130 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4131 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4132 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4133 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4134 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4135 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4136 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4137 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4138 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4139 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4140 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4141 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4153 | `hermes:init.4th` | `0x9d6119b69d4113af` | ok |
| 4160 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4161 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4162 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4163 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4164 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4165 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4166 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4167 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4168 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4169 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4170 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4171 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4172 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4173 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4174 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4177 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4178 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4179 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4180 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4181 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4182 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4110 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4111 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4112 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4113 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4122 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4123 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4124 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4125 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4126 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4127 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4128 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4129 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4130 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4131 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4132 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4133 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4134 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4135 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4136 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4137 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4138 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4139 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4140 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4141 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4153 | `hermes:init.4th` | `0x7d4ab35a4d3ffc0c` | ok |
| 4160 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4161 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4162 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4163 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4164 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4165 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4166 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4167 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4168 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4169 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4170 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4171 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4172 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4173 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4174 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4177 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4178 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4179 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4180 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4181 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4182 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4200 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
| 4201 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
| 4202 | `user-font-demo.4th` | `0xce1fd7d1b581a56d` | ok |
@@ -203,11 +203,11 @@
| 4840 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
| 4841 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
| 4842 | `init-l8-transition.4th` | `0xbcc1a81976f0a4c9` | ok |
| 4851 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4852 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4853 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4854 | `artemis:init.4th` | `0xfe6e570467368153` | ok |
| 4855 | `hermes:init.4th` | `0x9d6119b69d4113af` | ok |
| 4851 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4852 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4853 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4854 | `artemis:init.4th` | `0x90208e9ab5ae0070` | ok |
| 4855 | `hermes:init.4th` | `0x7d4ab35a4d3ffc0c` | ok |
| 4900 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 4901 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 4902 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
@@ -297,42 +297,42 @@
| 5000 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 5001 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 5002 | `fabric.4th` | `0x9b1d061339cea98d` | ok |
| 5003 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5004 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5005 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5006 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5007 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5008 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5009 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5010 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5011 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5012 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5013 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5014 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5015 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5016 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5017 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5018 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5019 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5020 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5021 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5022 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5023 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5024 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5025 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5026 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5027 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5028 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5029 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5030 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5031 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5032 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5033 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5034 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5035 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5036 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5037 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5038 | `common:messaging.4th` | `0x892fd1c86d8c175e` | ok |
| 5003 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5004 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5005 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5006 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5007 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5008 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5009 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5010 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5011 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5012 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5013 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5014 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5015 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5016 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5017 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5018 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5019 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5020 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5021 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5022 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5023 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5024 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5025 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5026 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5027 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5028 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5029 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5030 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5031 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5032 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5033 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5034 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5035 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5036 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5037 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5038 | `common:messaging.4th` | `0x000bef369e84a1aa` | ok |
| 5100 | `turtle.4th` | `0x4d470418ca543365` | ok |
| 5101 | `turtle.4th` | `0x4d470418ca543365` | ok |
| 5102 | `turtle.4th` | `0x4d470418ca543365` | ok |
@@ -349,7 +349,7 @@
| 5113 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
| 5114 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
| 5115 | `sdk.4th` | `0x008fdbbb62c94a3a` | ok |
| 5116 | `hermes:init.4th` | `0x9d6119b69d4113af` | ok |
| 5116 | `hermes:init.4th` | `0x7d4ab35a4d3ffc0c` | ok |
## Conflicts
+1
View File
@@ -497,5 +497,6 @@ Block 4854
( INIT). Hermes always exists by Artemis's birth. )
S" common:messaging.4th" EXEC
MSG-CD-INIT
2 MY-CH-ID !
S" 2 COMMON-CH @ CH-ADD-MBR" S" Hermes" VM-EXEC
STARTUP-BANNER
+5 -1
View File
@@ -42,6 +42,7 @@ VARIABLE MBR-FREE-HEAD
VARIABLE MSG-SEQ
VARIABLE CH-ACTIVE
VARIABLE COMMON-CH
VARIABLE MY-CH-ID
Block 5006
( VM name routing table -- same fixed table every VM loads, )
( so IDX>NAME resolves identically everywhere. )
@@ -351,7 +352,10 @@ Block 5031
: CH-MINT-ID ( owner -- id )
MSG-SEQ @ 1+ DUP MSG-SEQ !
SWAP 32 LSHIFT OR ;
( H.8: initiator-only gate. Refuses if `from` doesn't )
( match MY-CH-ID -- no posting while claiming another VM. )
: CH-REQUEST ( type from to paddr plen -- )
3 PICK MY-CH-ID @ <> IF 2DROP 2DROP DROP EXIT THEN
COMMON-CH @ CH-STATE@ CH-OPEN = IF
COMMON-CH @ MSG-SEND
ELSE 2DROP 2DROP DROP THEN ;
@@ -385,7 +389,7 @@ Block 5033
MBR-INIT-FREE
0 MSG-SEQ !
0 MSG-LAST-MSG !
0 CH-ACTIVE !
0 CH-ACTIVE ! -1 MY-CH-ID !
COMMON-INIT
VM-NAMES-INIT ;
Block 5034
+1
View File
@@ -15,6 +15,7 @@ Block 5116
( VM that doesn't exist yet at Hera's own birth. )
S" common:messaging.4th" EXEC
MSG-CD-INIT
1 MY-CH-ID !
S" lib.4th" EXEC
1 COMMON-CH @ CH-ADD-MBR
0 COMMON-CH @ CH-ADD-MBR