func (b *broker) checkPrefixAnnouncements() error { // Get prefixes from NS nsPrefixes := map[types.DevAddrPrefix]string{} devAddrClient := pb_lorawan.NewDevAddrManagerClient(b.nsConn) resp, err := devAddrClient.GetPrefixes(b.GetContext(""), &pb_lorawan.PrefixesRequest{}) if err != nil { return errors.Wrap(errors.FromGRPCError(err), "NetworkServer did not return prefixes") } for _, mapping := range resp.Prefixes { prefix, err := types.ParseDevAddrPrefix(mapping.Prefix) if err != nil { continue } nsPrefixes[prefix] = strings.Join(mapping.Usage, ",") } // Get self from Discovery self, err := b.Component.Discover("broker", b.Component.Identity.Id) if err != nil { return err } announcedPrefixes := self.DevAddrPrefixes() nextPrefix: for nsPrefix, usage := range nsPrefixes { if !strings.Contains(usage, "world") && !strings.Contains(usage, "local") { continue } for _, announcedPrefix := range announcedPrefixes { if nsPrefix.DevAddr == announcedPrefix.DevAddr && nsPrefix.Length == announcedPrefix.Length { b.Ctx.WithField("NSPrefix", nsPrefix).WithField("DPrefix", announcedPrefix).Info("Prefix found in Discovery") continue nextPrefix } } b.Ctx.WithField("Prefix", nsPrefix).Warn("Prefix not announced in Discovery") } return nil }
} client := discovery.NewDiscoveryClient(conn) client.GetAll(context.Background(), &discovery.GetServiceRequest{}) md := metadata.Pairs( "service-name", "broker", "id", viper.GetString("id"), "token", viper.GetString("auth-token"), ) dscContext := metadata.NewContext(context.Background(), md) success := true for _, prefixString := range args { ctx := ctx.WithField("Prefix", prefixString) prefix, err := types.ParseDevAddrPrefix(prefixString) if err != nil { ctx.WithError(err).Error("Could not register prefix") success = false continue } _, err = client.AddMetadata(dscContext, &discovery.MetadataRequest{ ServiceName: "broker", Id: viper.GetString("id"), Metadata: &discovery.Metadata{Metadata: &discovery.Metadata_DevAddrPrefix{ DevAddrPrefix: prefix.Bytes(), }}, }) if err != nil { ctx.WithError(err).Error("Could not register prefix") success = false