@@ -90,8 +90,10 @@ fn get_noc_cat_version(id: u64) -> u64 {
90
90
id & NOC_CAT_VERSION_MASK
91
91
}
92
92
93
- pub fn gen_noc_cat ( id : u16 , version : u16 ) -> u64 {
94
- NOC_CAT_SUBJECT_PREFIX | ( ( id as u64 ) << 16 ) | version as u64
93
+ /// Generate CAT that is embeddedable in the NoC
94
+ /// This only generates the 32-bit CAT ID
95
+ pub fn gen_noc_cat ( id : u16 , version : u16 ) -> u32 {
96
+ ( ( id as u32 ) << 16 ) | version as u32
95
97
}
96
98
97
99
pub struct AccessorSubjects ( [ u64 ; MAX_ACCESSOR_SUBJECTS ] ) ;
@@ -103,10 +105,10 @@ impl AccessorSubjects {
103
105
a
104
106
}
105
107
106
- pub fn add ( & mut self , subject : u64 ) -> Result < ( ) , Error > {
108
+ pub fn add_catid ( & mut self , subject : u32 ) -> Result < ( ) , Error > {
107
109
for ( i, val) in self . 0 . iter ( ) . enumerate ( ) {
108
110
if * val == 0 {
109
- self . 0 [ i] = subject;
111
+ self . 0 [ i] = NOC_CAT_SUBJECT_PREFIX | ( subject as u64 ) ;
110
112
return Ok ( ( ) ) ;
111
113
}
112
114
}
@@ -287,6 +289,10 @@ impl AclEntry {
287
289
Ok ( ( ) )
288
290
}
289
291
292
+ pub fn add_subject_catid ( & mut self , cat_id : u32 ) -> Result < ( ) , Error > {
293
+ self . add_subject ( NOC_CAT_SUBJECT_PREFIX | cat_id as u64 )
294
+ }
295
+
290
296
pub fn add_target ( & mut self , target : Target ) -> Result < ( ) , Error > {
291
297
let index = self
292
298
. targets
@@ -650,7 +656,7 @@ mod tests {
650
656
let v3 = 3 ;
651
657
// Accessor has nodeif and CAT 0xABCD_0002
652
658
let mut subjects = AccessorSubjects :: new ( 112233 ) ;
653
- subjects. add ( gen_noc_cat ( allow_cat, v2) ) . unwrap ( ) ;
659
+ subjects. add_catid ( gen_noc_cat ( allow_cat, v2) ) . unwrap ( ) ;
654
660
655
661
let accessor = Accessor :: new ( 2 , subjects, AuthMode :: Case , am. clone ( ) ) ;
656
662
let path = GenericPath :: new ( Some ( 1 ) , Some ( 1234 ) , None ) ;
@@ -659,19 +665,20 @@ mod tests {
659
665
660
666
// Deny for CAT id mismatch
661
667
let mut new = AclEntry :: new ( 2 , Privilege :: VIEW , AuthMode :: Case ) ;
662
- new. add_subject ( gen_noc_cat ( disallow_cat, v2) ) . unwrap ( ) ;
668
+ new. add_subject_catid ( gen_noc_cat ( disallow_cat, v2) )
669
+ . unwrap ( ) ;
663
670
am. add ( new) . unwrap ( ) ;
664
671
assert_eq ! ( req. allow( ) , false ) ;
665
672
666
673
// Deny of CAT version mismatch
667
674
let mut new = AclEntry :: new ( 2 , Privilege :: VIEW , AuthMode :: Case ) ;
668
- new. add_subject ( gen_noc_cat ( allow_cat, v3) ) . unwrap ( ) ;
675
+ new. add_subject_catid ( gen_noc_cat ( allow_cat, v3) ) . unwrap ( ) ;
669
676
am. add ( new) . unwrap ( ) ;
670
677
assert_eq ! ( req. allow( ) , false ) ;
671
678
672
679
// Allow for CAT match
673
680
let mut new = AclEntry :: new ( 2 , Privilege :: VIEW , AuthMode :: Case ) ;
674
- new. add_subject ( gen_noc_cat ( allow_cat, v2) ) . unwrap ( ) ;
681
+ new. add_subject_catid ( gen_noc_cat ( allow_cat, v2) ) . unwrap ( ) ;
675
682
am. add ( new) . unwrap ( ) ;
676
683
assert_eq ! ( req. allow( ) , true ) ;
677
684
}
@@ -687,7 +694,7 @@ mod tests {
687
694
let v3 = 3 ;
688
695
// Accessor has nodeif and CAT 0xABCD_0003
689
696
let mut subjects = AccessorSubjects :: new ( 112233 ) ;
690
- subjects. add ( gen_noc_cat ( allow_cat, v3) ) . unwrap ( ) ;
697
+ subjects. add_catid ( gen_noc_cat ( allow_cat, v3) ) . unwrap ( ) ;
691
698
692
699
let accessor = Accessor :: new ( 2 , subjects, AuthMode :: Case , am. clone ( ) ) ;
693
700
let path = GenericPath :: new ( Some ( 1 ) , Some ( 1234 ) , None ) ;
@@ -696,13 +703,14 @@ mod tests {
696
703
697
704
// Deny for CAT id mismatch
698
705
let mut new = AclEntry :: new ( 2 , Privilege :: VIEW , AuthMode :: Case ) ;
699
- new. add_subject ( gen_noc_cat ( disallow_cat, v2) ) . unwrap ( ) ;
706
+ new. add_subject_catid ( gen_noc_cat ( disallow_cat, v2) )
707
+ . unwrap ( ) ;
700
708
am. add ( new) . unwrap ( ) ;
701
709
assert_eq ! ( req. allow( ) , false ) ;
702
710
703
711
// Allow for CAT match and version more than ACL version
704
712
let mut new = AclEntry :: new ( 2 , Privilege :: VIEW , AuthMode :: Case ) ;
705
- new. add_subject ( gen_noc_cat ( allow_cat, v2) ) . unwrap ( ) ;
713
+ new. add_subject_catid ( gen_noc_cat ( allow_cat, v2) ) . unwrap ( ) ;
706
714
am. add ( new) . unwrap ( ) ;
707
715
assert_eq ! ( req. allow( ) , true ) ;
708
716
}
0 commit comments