in mfg/verify.go [79:123]
func (m *Mfg) validateManMmrs(man manifest.MfgManifest) error {
areaMap := map[int]struct{}{}
if man.Meta != nil {
for _, mmr := range man.Meta.Mmrs {
fa := man.FindFlashAreaName(mmr.Area)
if fa == nil {
return errors.Errorf(
"flash area %s missing from mfg manifest", mmr.Area)
}
if _, dup := areaMap[fa.Id]; dup {
return errors.Errorf(
"mfg manifest contains duplicate mmr ref: %s", mmr.Area)
}
areaMap[fa.Id] = struct{}{}
}
}
seen := map[int]struct{}{}
for _, t := range m.Tlvs() {
if t.Header.Type == META_TLV_TYPE_MMR_REF {
body, err := t.StructuredBody()
if err != nil {
return err
}
mmrBody := body.(*MetaTlvBodyMmrRef)
if _, ok := areaMap[int(mmrBody.Area)]; !ok {
return errors.Errorf(
"mmr ref %d missing from mfg manifest", mmrBody.Area)
}
seen[int(mmrBody.Area)] = struct{}{}
}
}
for area, _ := range areaMap {
if _, ok := seen[area]; !ok {
return errors.Errorf("mmr ref %d missing from mmr", area)
}
}
return nil
}