 Так, я Мекс. Все слышали меня. Это будет, конечно, про контролинтерфейс, или как вы покажете все эти вещи, которые вы видели с программами, а не с финкерами. Это легендарь. Береги интервью, какие-то технические детали, экземпли, и надежды на потенциал будущего. Что это? Особенно, что контролинтерфейс для программы это что-то VTI для человечества. Это не может быть 100% еще. Может быть, в какой-то случае. Это пайтен и си-имплементация, и пайтен и си-имплементация. Не просто бандит на си. Это потому, что протокол очень простой. Это работает. Это как си-имплентация, но мы имеем в виду. Это просто, как си-имплентация. Взрывы и фрагменты, это как раз театр, вы выживаете, вы выживаете, и фрагменты, если вы выживаете, если фрагменты были выживены из-за чего-то иначе. Си-имплентация, фрагменты, фрагменты, фрагменты, портнок, все существуют в области. Потому что, давайте посмотрим. Если кто-то у вас есть access to your core network, у вас есть большой проблем, чем выживая какие-то variables для контролета. В большом виде. Вы видели это уже? В несколько раз. Важно, что эти маленькие пинные вещи. Это это, где контролетная интерфейска. И я думаю, что пик-шери-би то дает, потому что это тоже. Так, это довольно wide spread, почти everywhere. Если это нет, то вы можете добавить. Это не так сложно. Теперь, какие-то небольшие факты. Это довольно сложно увидеть, но это поддерживает в Wireshark. Вы можете видеть и увидеть. И это было довольно легко. Есть только 6 массажов, в том числе errors и все. Это основано на IPA multiplex, который означает, что есть формат binary prefix, fixed length, 3 auto parts, и потом некоторые тексты, которые тоже довольно легко. Есть три варианта variables. Read only, Read write write only. Если вы имплементировали себя, то это будет для вас, как вы используете variable. Это literally all the possible messages между client and server. Это очень так просто. Вы говорите variable, или confirmation reply, или error. Same as get, and you get trapped. И у нас есть документация. Это не 100% complete, но если вы идете к этому линксу, то есть есть actually user manuals per program. И у них есть chapter on the control interface of the program and on the protocol itself, потому что это очень легко. Вот как выглядит. This is actual message with some ID, variable, value. This is what you get in get back. It's rather redundant. ID is random. It cannot be zero because zero is used for traps. The rest is just that. Variable format, values, not specified. It's totally up to you. What you put there, that will be there. A little look at sample of part of the code which works with that. That's in Python. We expose control class, which do all the things like verifying that answer to your command actually makes sense. Removing headers, adding headers, the protocol simple, the implementation simple. And there are already examples of how you can use it, but you can make your own implementation. You can consider it somewhat a hello world of network protocols. Take your favorite language, implement the control protocol. It should just work. A bit of C code, it's slightly more hairy, because it's C, but it's still rather easy. The readily available macros, if you want to add some variable or expose some things. And there are a few things which sort of exposed by default. Most of osmokom programs support rate counters, which say, every time location update happens, we increase the counter and attract the time. All of them are exposed automatically as variable rate counter dot and the name of the counter. That's very handy. Another potential use is fsm debugging. We got nice osmo fsm infrastructure recently for finite state machines. And you can poke into them using the control interface. And that's also by default. So it's part of the library, the moment the program supports fsm, that's available. And another nice example is that osmo HLR, which was just mentioned, it have two variables to enable and disable services on per IMSI bases. And this is propagated dynamically to SJSN, works in runtime. So that's just few samples, which are easy. I did like what easy. There are more to those, but refer to the documentation. Now, there is sort of mismatch. Some bits available for control protocol, some available for VTI, some both. Ideally, we want to have single source of truth. So we make it once and it's exposed to control, VTI, configuration, whatever. There's been some discussion in mailing list. Please do join mailing list, by the way. How we can achieve that. The surprising part is nobody seems to have done it yet. There's an open source implementation, not a proprietary, I know of, but people are trying to. It's kind of a known problem that you have. Cisco, Juniper, whatever router each configured in its own peculiar way and nothing ever works. There's been two nice RFCs. Netconf and YAML. Netconf is the protocol, which is sort of like our control interface on steroids. It should be vendor agnostic, it's a standard, it should configure anything. And YAML is yet another markup language. I don't think it stands for that, but the idea is that. How you describe those configurations. Different states of configuration is applied already or not and so on. Those are rather recent. This is literally a few years old and I think it's largely driven by SDN community. So that's one of the ideas, how we might go on from current state. We will use and it's lots of works, so please do contribute to ideas too. And that's actually already the final slide. So I will do some demo to show you how it actually works. Later on there will be questions. But anticipating one potential question is why feature X is not exposed. That's because you have not sent page yet. Or you can just hire us or simply ask. Yes, that might also work. Let's see if demo effect works. Larger font. I'm not sure. Oops. Sorry guys, I'm not sure I can make a larger font. But I'll explain everything which happens. Don't worry, I'll do the dance. So we start Osmo BSC not the Fridge Repart, but the old one which is a master branch. It's desperately trying to connect to MSC, but we ignore that. I don't have network working anyway. Why am I using this? Because it has control interface. So now I'm switching to that's OpenBSC repository in the contrib. There is Python script BSC control . This won't work. Touchpad is broken. I don't have to I don't know how to configure it right now. Does anyone have a mouse, Randy? Yeah. Sorry for that. No mouse. No context menu. One of the things exposed is the short name. So if I run the command minus s for set, short name. Stop. Oh, brilliant. Thank you. So I'll try to make it a bit larger. So it should be somewhat visible. I hope it kind of works. How on earth do you make it big one? And the font is Colors colors. Do you see this? Okay. Perfect. It's a mixture of Russian and German just for edit entertainment. It's just simple Russian. It kind of works. So here in OpenBSC country there is this Python script which can do the magic with the control interface. But that's just one implementation. You don't have to use it. It's rather simple for illustration. It's up to you how you use it. So say we want to set the short name and we get reply. This is the idea of operation. It's just some random number. You got back the variable and what you set it to. You can also get the variable and to see that it actually matches what you just said. By the way, that's not because I just like my name. It's very handy to have descriptive name for your network if you're in the office with 10 people running their own JSM. And another nice mode is M for monitor. So now we receive any traps generated by the OsmoBSC. The traps generated based on various events. One of the events, for instance, is if I start BTS and we got a trap message saying that BTS0 is connected. Also variable value. And that's about it. Do you have questions or shall I show something else? What would you like? Wait for the mic, please. Sorry, there was one in front. I know I should know this, but I never really understood what the trap means or how it works or what it does. It's essentially an event. Something has happened. So there are variables in control protocol arbitrary. You can set them from the control protocol. You can get them from the control protocol. But if these variables have changed outside of control protocol, say BTS got connected, then the server running control protocol generates a notification to you as a client. So it's like in HTTP it would be an event or some equivalent. When do the calls actually get implemented? Like in the VTY it's different. TX attenuation will happen immediately. ARCN will happen after reboot of the lower layers. Yes. Sorry, but there is no common ground. It just grown this way. Something is applied immediately. Some needs to restart and so on. We want to have it unified. We don't have it yet. There is no one way you can judge. Just try to refer to documentation. And if it's not there mailing list and ping us. So then is it the case that the way it's implemented in the VTY would be the same in the control interface or not necessarily? Ideally, yes. In practice I can... No, no. It is the same because the question whether or not a setting is applied immediately or is applied at a later stage mainly depends on whether that is a setting that is communicated over AVIS-OML to the BTS or not. AVIS-OML only happens at BTS connection time at least in our implementation. Or some things in OML you can only change if you previously take down the transceiver then reconfigure it and bring it up again. So it's not a question whether it's VTY or control interface but it's basically whether or not it's a parameter of the BSC or MSC itself internally which takes effect immediately or whether it's a parameter that needs to be transported to the BTS and then wait for the BTS restart. Ok, anyway, Kevin. Is it possible to get a list of all the variables and the range value for each variable? I don't think so. I don't think we implemented this in the inspection yet. So, unfortunately, it's manual process at the moment that's why the documentation might be incomplete. We have to sync it manually. Yeah, that's a disadvantage. So for the VTY it also used to be that well, ok, the range is sort of self-explanatory in the VTY but in what exists but for the counters and for the VTY we have code inside Libosmokor that can export that list. So basically the VTY reference manual and also the list of counters is generated automatically basically by the code itself but the control interface doesn't have any like enumeration or other feature at this point. Ok, normal question. Thank you for your attention. Ok, then we finish early.